fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

2016年08月 | ARCHIVE-SELECT | 2016年10月

| PAGE-SELECT |

≫ EDIT

UE4 ワールド座標をスクリーン座標に変換する(Convert World Location To Screen Location)

ワールド座標をスクリーン座標に変換する方法です。
こちらを参考にさせていただきました。

・UMGのUIを3Dキャラクター頭上に表示 #UE4Study
http://gameprogrammemo.tumblr.com/post/126581883062/umg%E3%81%AEui%E3%82%923d%E3%82%AD%E3%83%A3%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%BC%E9%A0%AD%E4%B8%8A%E3%81%AB%E8%A1%A8%E7%A4%BA-ue4study

・Thread: [UMG Tutorial] - Placing Widgets Over Actors In Screenspace
https://forums.unrealengine.com/showthread.php?50130-UMG-Tutorial-Placing-Widgets-Over-Actors-In-Screenspace

ワールド座標をスクリーン座標に変換するには
「Convert World Location To Screen Location」ノードを使います。
ConvertWorldLocationToScreenLocation001.jpg
「Target」には「Player Controller」を。
「World Location」にはワールド座標を指定します。
そうすると「Screen Location」にスクリーン座標が返ってきます。

サードパーソンテンプレートの謎の「?」マークのアクターの
スクリーン座標を取得するブループリントだとこんな感じに。
ConvertWorldLocationToScreenLocation002.jpg

結果がこんな感じになります。
ConvertWorldLocationToScreenLocation000.jpg

まだ深くは調べてないのですが、どうもスクリーン座標がそのまま返ってくるようなので
ウィンドウサイズを変更できるようにしていた場合、値も変わってしまうので
ゲームなどで使う場合は少し対応が必要になりそうな感じがしますね。

追記。UMGを表示するとこんな感じでアクターの位置に表示できたりします。
名前表示

| UE4 | 13:01 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 ウィンドウサイズを変えずに解像度を変更する(Set Screen Resolution、Set Resolution Scale Value、Set Resolution Scale Normalized)

ゲーム中に解像度を変更する方法です。
こちらを参考に。

・UE4 GameUserSettingsを使ってウィンドウモードなどを設定する
http://unrealengine.hatenablog.com/entry/2016/08/22/220000

解像度の設定に「Game User Settings」を使います。

・Game User Settings を使った設定と保存(Get Game User Settings、Apply Settings)
http://kagring.blog.fc2.com/blog-entry-231.html

この「Game User Settings」に対して「Set Resolution Scale Normalized」で
解像度スケールをかけてやります。
GameeUserSettomgs004.jpg
余計なノード混ざってますがこんな感じですね。

GameeUserSettomgs002.jpg
「Set Resolution Scale Normalized」は解像度のスケールを「0.0-1.0」の間で設定します。
「New Scale Normalized」には0.0から1.0の値を指定します。

これだけで、もとのこの画面が
SetResolutionScaleValue001.jpg
スケールを小さくするとこんな感じに解像度が低くなります。
SetResolutionScaleValue000.jpg

リアルタイムでこういった処理をやる場合は、処理負荷が大きかったりするときなのですかね。
ちなみに、この解像度変更はウィンドウのサイズは変わりませんので注意してください。

あとは「Set Resolution Scale Normalized」以外にもこういったノードがあります。

解像度のスケールを「0.0から100.0」で指定する「Set Resolution Scale Value」ノード。
SetResolutionScaleValue003.jpg
「New Scale Normalized」には0.0から100.0の値を指定します。

解像度を直接指定する「Set Screen Resolution」
SetResolutionScaleValue002.jpg
「Resolution」には縦横の解像度の値を入れます。

alwei さんのブログに書いてあるのですが、

これが結構ハマりやすいところで、"SetResolutionScaleValue"を使って値を設定すると、
設定値通りにいかないことがあります。
どうやらこの値はWindowサイズによって上限値と下限値が決められているらしく、
単純に値を設定してそれ通りに設定されないことがあります。

この場合、"Set Screen Resolution Nomalized"を使用すると、
正しく正規化された値を0から1の間で設定可能で、
例えば「解像度を25%まで落としたい」という場合に"0.25"という値を設定すれば正常に適用できます。
下手に"SetResolutionScaleValue"を利用すると下限値の設定に引っかかりやすいので、
"Set Screen Resolution Nomalized"を利用してください。


といったことがあるっぽいので注意が必要そうです。

| UE4 | 15:24 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 Game User Settings を使った設定と保存(Get Game User Settings、Apply Settings)

GameUserSettings を使った設定を行う方法です。

・コンソールコマンドの実行(Execute Console Command)

これでコマンドを発行して行っていることを、専用のノードを使って設定できるようになったのが
Game Use Settings になるようです。

今回参考にさせていただいたのはこちら。
いつもお世話になってます!

・UE4 GameUserSettingsを使ってウィンドウモードなどを設定する

さて、今回は設定の方法と反映だけの説明になります。
各設定ノードについては次回にでも。

Game User Settings を使って設定する場合は
「Get Game User Settings」ノードを使います。
GameeUserSettomgs000.jpg

これで取得した値を使って、設定をしたり、設定の反映を行います。
設定を反映する場合は「Apply Settings」ノードを使います。
GameeUserSettomgs001.jpg

この二つを使うことで、設定したものを反映して保存することができます。
GameeUserSettomgs005.jpg
こんな感じですね。

alwei さんのサイトによると

これらの設定は適用した段階でUE4側で自動的にコンフィグファイルに保存されます。
"Save Settings"というノードがありますが、こちらを使用しなくてもなぜか保存されています。
なので次回以降の起動でもこの設定を適用した状態で起動することになります。
コンフィグファイル自体はWindowsの場合、デフォルトでは以下の場所に格納されます。

C:\Users\"ユーザー名"\AppData\Local\"プロジェクト名"\Saved\Config\WindowsNoEditor\GameUserSettings.ini

AppDataフォルダー以下は隠しファイルになっていますので、
探す場合には隠しファイルを表示させてください。

なぜか自動保存されていることに気づかず、
設定を変えてしまうと特に再設定しなければそのまま固定されてしまうので注意してください。

とのことで、
C:\Users\"ユーザー名"\AppData\Local\"プロジェクト名"\Saved\Config\WindowsNoEditor\GameUserSettings.ini
に、自動保存されるようです。
エディタ上で設定しても保存されるので注意しましょう。

この Game User Settings で設定できる項目はこういうものがあるようです。

・UGameUserSettings
https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/GameFramework/UGameUserSettings/index.html

これらについてはまた後程にでも。

| UE4 | 18:18 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 レイとオブジェクトのコリジョンとのヒット判定(Line Trace For Objects、Multi Line Trace For Objects)

レイとコリジョンのあたり判定です。
今回は指定したオブジェクトタイプのコリジョンに対してのものになります。
ここらへんを参考にさせてもらいました。

・UE4 マウスの位置をワールド座標に変換する
http://qiita.com/nkdtr/items/3a6768f6a60996136794

・ブループリントにおけるレイキャスト(トレーシング)の使い方
https://docs.unrealengine.com/latest/JPN/Gameplay/HowTo/UseRaycasts/Blueprints/index.html

オブジェクトでのレイとコリジョンのあたり判定は「Line Trace For Objects」ノードを使います。
LineTraceForObjects002.jpg
「Start」から「End」に向かうレイでチェックを行います。
「Object Types」は判定を行うオブジェクトの配列を指定します。
「Make Array」で持ってこれます。
「Trace Complex」はComplex コリジョンと判定をするかのチェックです。
「Actors to Ignore」は判定を無視するアクター配列です。
「Draw Debug Type」はこのノードの処理をしたときに画面上に結果を表示するかどうかです。
「None」は表示なし、「For One Frame」は1フレームだけ表示。
「For Duration」は一定時間表示、「Persistent」は永続表示となります。
「Ignore Self」は自分自身を判定から除外するかどうかです。

「Complex コリジョン」についてはこちらを。

・Simple コリジョンと Complex コリジョン
https://docs.unrealengine.com/latest/JPN/Engine/Physics/SimpleVsComplex/index.html

「Line Trace For Objects」は最初にヒットした結果を返します。
結果の取得はこんな感じに取得できます。
LineTraceForObjects000.jpg

「Line Trace For Objects」は最初にヒットした結果を返しますが
「Multi Line Trace For Objects」を使うとすべてのヒットした結果を受け取れます。
LineTraceForObjects001.jpg

と、こんな感じでしょうか。
「Line Trace By Channel」と同じくゲームでは使うことが多そうですね。

| UE4 | 16:52 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 レイとチャンネルのコリジョンとのヒット判定(Line Trace By Channel、Multi Line Trace By Channel)

レイとコリジョンのあたり判定です。
今回は指定したチャンネルに属するコリジョンに対してのものになります。
ここらへんを参考にさせてもらいました。

・UE4 マウスの位置をワールド座標に変換する
http://qiita.com/nkdtr/items/3a6768f6a60996136794

・ブループリントにおけるレイキャスト(トレーシング)の使い方
https://docs.unrealengine.com/latest/JPN/Gameplay/HowTo/UseRaycasts/Blueprints/index.html

レイとコリジョンのあたり判定は「Line Trace By Channel」ノードを使います。
LineTraceByChannel000.jpg
「Start」から「End」に向かうレイでチェックを行います。
「Trace Channel」は判定を行うコリジョンのチャンネルを指定します。
デフォルトでは「Visibility」になっていて「表示しているもの」と受け取りそうですが
存在しているチャンネルのデフォルトが「Visibility」になっているだけなので、
自分でチャンネルを増やして指定することができます。
「Trace Complex」はComplex コリジョンと判定をするかのチェックです。
「Actors to Ignore」は判定を無視するアクター配列です。
「Draw Debug Type」はこのノードの処理をしたときに画面上に結果を表示するかどうかです。
「None」は表示なし、「For One Frame」は1フレームだけ表示。
「For Duration」は一定時間表示、「Persistent」は永続表示となります。
「Ignore Self」は自分自身を判定から除外するかどうかです。

「Complex コリジョン」についてはこちらを。

・Simple コリジョンと Complex コリジョン
https://docs.unrealengine.com/latest/JPN/Engine/Physics/SimpleVsComplex/index.html

「Line Trace By Channel」は最初にヒットした結果を返します。
結果の取得はこんな感じに取得できます。
LineTraceByChannel001.jpg

「Line Trace By Channel」は最初にヒットした結果を返しますが
「Multi Line Trace By Channel」を使うとすべてのヒットした結果を受け取れます。
LineTraceByChannel002.jpg

と、こんな感じでしょうか。
マウスでクリックした位置のワールド座標でのヒット判定はこんな感じになります。
LineTraceByChannel003.jpg

レイ関係の判定はゲームで使うことが多そうですね。

| UE4 | 15:48 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT |