fc2ブログ

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

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

2017年03月 | ARCHIVE-SELECT | 2017年05月

| PAGE-SELECT | NEXT

≫ EDIT

UE4 日時を文字列に変換する(Date Time、As Date Time、As Date、As Time)

「Now」や「Today」ノードなどで取得した
「Date Time」型の変数を文字列に変換する方法です。

UE4では「Date Time」型を「Text」にするノードが複数用意されています。
時間を文字列に変更006
さすがUE4さんですわ…!

というわけで、
「As Date Time」ノードは「Date Time」型を「年日時」という文字列に変換できます。
時間を文字列に変更000
表示結果はこんな感じに。
時間を文字列に変更003

「As Date」ノードは「As Date Time」型を「年日」という文字列に変換できます。
時間を文字列に変更001
表示結果はこんな感じに。
時間を文字列に変更004

「As Time」ノードは「As Date Time」型を「時」という文字列に変換できます。
時間を文字列に変更002
表示結果はこんな感じに。
時間を文字列に変更005

といった感じで簡単に文字列に変換できます。
これ以外に自分で表示形式を変更したいのであれば「Break Date Time」ノードを使って
全ての要素を分解して再構築して使うのがいいと思います。
「To Text」ノードを使えばいい感じの文字列が使えるのかなと思います。

| UE4 | 11:53 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 現在の日時を取得する(Now、Today、Break Date Time)

現在の日時を取得する方法です。

参考にさせていただいたサイトがこちら!

・UE4小ネタ : 制限時間の実装方法を色々と
http://pafuhana1213.hatenablog.com/entry/2015/11/21/014427

現在の日時を取得するには「Now」ノードを使います。
現在の時間取得000
このノード名どうにかならなかったんだろうかと思わなくもないですが(笑

「Now」ノードは「DateTime」を返します。
そのまま表示するとこんな感じになります。
時間を文字列に変更003

「Today」というノードは現在の日付だけ取得できます。
現在の時間取得003

とはいえ「Now」と同じく「Date Time」を返すので表示してみると時間が0なだけですね。
現在の時間取得002

「DateTime」は「Break Date Time」ノードを使うことで各要素に分離できます。
現在の時間取得001

といった感じで使えるみたいですね。
とりあえず取得してあれこれするだけなら上記二つのノードだけで大丈夫そうです。
他にも表示系や、チェック系があるっぽいのでそれはまたの機会にでも!

| UE4 | 12:40 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 現在のレベルを開きなおす(Get Current Level Name、Open Level)

現在のレベルを開きなおす方法です。

今回の方法では「Get Current Level Name」ノードと
「Open Level」ノードを使います。
ノードについての説明はここらへんに書いてあります。

・現在のレベル名を取得する(Get Current Level Name)
http://kagring.blog.fc2.com/blog-entry-276.html

・レベルの移動(Open Level)
http://kagring.blog.fc2.com/blog-entry-128.html

参考にしたのはこちらのサイトです。

・UE4で現在のレベルを取得してリセットする→Restart Gameノードでいいよ!
http://konabe.blog.jp/archives/42737706.html

こんな感じでBPを組みます。
レベルを開きなおす000
「Get Current Level Name」で現在のレベル名を取得して
「Open Level」でレベルを開きなおす。
といった簡単な方法でできます。

ゲームをリセットする場合は参考先のサイトにもあるとおり
「Restart Game」ノードを使った方がよいのですが
これを使おうとすると「Game Mode」および「Game Mode Base」について
調べて説明しないといけないので次の機会にということで…。

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

≫ EDIT

UE4 現在のレベル名を取得する(Get Current Level Name)

現在のレベルの名前を取得する方法です。

こちらを参考に。

・UE4で現在のレベルを取得してリセットする→Restart Gameノードでいいよ!
http://konabe.blog.jp/archives/42737706.html

「Get Current Level Name」というノードを使います。
現在のレベル名取得003

公式ドキュメントはこちらに。

・Get Current Level Name
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Game/GetCurrentLevelName/index.html

オプションの「Remove Prefix String」なのですが
チェックを外すとレベル名の前にプリフィックス名がつくようです。
ただ、ドキュメントを見てもこれがなんなのかよくわからないのですよね…。
ドキュメントもう少しちゃんと説明してほしい…エピックさん…!

remove any streaming- or editor- added prefixes from the level name.
レベル名からストリーミングまたはエディタで追加された接頭辞を削除します。

とのことです。
とりあえずはチェックいれたままで使うのがよさそうです。

このノードは現在のレベルの名前を返してくれます。
こんな感じで表示してみると。
現在のレベル名取得001

こんな感じの名前が表示されます。
現在のレベル名取得002

今のレベルを開きなおすなどには結構使えるんじゃないかなと思います。

| UE4 | 12:43 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 ワイルドーカードを使った書式設定で文字列を作成する(Format String、Format Text)

BPを使って書式設定を使った文字列を作成する方法です。
C言語でいうところの「printf("%d, %s", Value, String)」みたいなやつですね。

公式ドキュメントにこういうのがありました。

・ユーザーに表示するテキストの書式設定
https://docs.unrealengine.com/latest/JPN/Gameplay/Localization/Formatting/index.html

「Format String」「Format Text」を使うと書式設定での文字列が作成できそうです。

「Format String」はこんな感じに。
書式設定テキスト000
Formatで指定した文字列の中で「{}(中括弧)」の中に数値および文字列を入れることで
ワイルドカードの書式設定となり入力ピンが増えます。

使用例はこんな感じに。
書式設定テキスト001
上記設定だと「{0}がI love you」に、「{1}が12.345」置き換えられ文字列が生成されます。

表示してみた結果がこちら。
書式設定テキスト004

String型ではなくText型の「Format Text」ノードもあります。
書式設定テキスト002

こちらの仕様例は数値ではなく名前指定の入力ピンになる方法です。
書式設定テキスト003
「{}(中括弧)」の中身に名前を入れることで、名前指定の入力ピンになります。

それ以外の使い方は「Format String」と一緒ですね。
表示してみた結果がこちら。
書式設定テキスト005
String入力ピンに「I love you」が入っていて、Name 入力ピンが空なので上記のような表示になります。

ここらへん「To Text」ノードなどを使うのも手ですが、純粋に結合するだけならこっちの方が見やすそうですね。

| UE4 | 17:44 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 3D座標を指定してSE(効果音)を再生して距離減衰させる(Play Sound at Location、Sound Attenuation)

この前に「Play Sound at Location」ノードを使ってSEを再生してみました。
こんな感じですね。

・UE4 3D座標を指定してSE(効果音)を再生する(Play Sound at Location)
http://kagring.blog.fc2.com/blog-entry-273.html

イメージとしては「Play Sound 2D」ではなく「Play Sound at Location」を使った時点で
SEの音量などが勝手に減衰するものだと思ってました。
しかし! まったくそんなことはなかったです…_(:3」∠)_

というわけで距離減衰などについて調べたところ、こんなのを見つけました。

ピンポイントでありました。UE4勢はすごいですね。いつもお世話になってます!
というわけで「サウンド減衰(Sound Attenuation)」について調べてみるとこんなページがありました。

・UE4のSound Attenuation (サウンド減衰)の使い方について
http://pafuhana1213.hatenablog.com/entry/2015/03/30/004003

まさにこれでした。

サウンド減衰とはこんな感じのことです(抜粋)

「カメラから遠い音源からの音は小さく、近い音源からの音は大きく聞こえる」
ようにする機能です。
また、3Dサウンド(カメラから右にある音源からの音は、右から聞こえるなど)を
有効にすることもできます。

さらに簡単に言うと、音源の位置を耳で把握させる機能です。
臨場感が増すので、とてもオススメできる機能です(VRでは特に効果的です!)。

というわけで「Sound Attenuation (サウンド減衰)」アセットの設定の方法について。

まず、「Sound Attenuation (サウンド減衰)」アセットを作成します。
サウンド減衰000

そうしたらこんな感じで「Sound Attenuation (サウンド減衰)」アセットが作成されます。
サウンド減衰001

とりあえずこれでアセットが作成できました。
この「Sound Attenuation (サウンド減衰)」アセットを
「Play Sound at Location」ノードに設定してあげましょう。
サウンド減衰002

という感じでパンとか音量が勝手に変わってくれるようになりました!
ありがとうおかずさん! ありがとうUE4!

あとは「Sound Attenuation (サウンド減衰)」アセットのパラメータの説明を。
サウンド減衰003

基本的に触るプロパティは、以下の3つだと思います

Distance Algorithm (距離を元に音量を決定するアルゴリズムの設定)
Radius       (減衰ボリュームの形状)
Falloff Distance  (フォールアウトが発生する距離で)

というわけで上記のパラメータをいじると割といい感じになりました。

公式ドキュメントはこちらに。

Unreal Engine | Ambient Sound Actor ユーザーガイド
Unreal Engine | サウンドの減衰

特に「サウンドの減衰」については形状やアルゴリズムについて書いてあるので
どういう減衰をするかのイメージをするのに役に立つのかなと思います。

注意点としてこんなことも書いてありました。

・Unreal Engine | サウンド キュー リファレンス
https://docs.unrealengine.com/latest/JPN/Engine/Audio/SoundCues/NodeReference/index.html

ステレオファイルは、左右のチャンネルで均等に再生され、 Radius min 値と Radius Max 値の間で音量がフェードします。ただし、空間化はされません
3Dオーディオ化させる時は、モノラル音源にしましょう!
…こんな馬鹿な事に引っかかるのは僕だけでいい

気を付けましょう!

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

≫ EDIT

UE4 3D座標を指定してSE(効果音)を再生する(Play Sound at Location)

SEを座標指定して再生する方法です。
3D空間でSEを鳴らすときなどに使えそうです。

こちらのサイトを参考にさせていただきました。

・Unreal EngineでSEを鳴らす方法について
http://uebeginner.jp/2017/01/03/unreal-engine%E3%81%A7se%E3%82%92%E9%B3%B4%E3%82%89%E3%81%99%E6%96%B9%E6%B3%95%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/

【UE4】音を再生する件(BluePrint編)
http://meganeo.blog.shinobi.jp/ue4/%E3%80%90ue4%E3%80%91%E9%9F%B3%E3%81%AE%E4%BB%B6-blueprint-

3D座標を指定してSEを鳴らすには「Play Sound at Location」ノードを使います。
SE再生3D001
「Sound」には、WaveファイルなどのSEアセットを指定します。
「Location」には座標をワールド座標系で指定します。
「Rotation」には回転をワールド座標系で指定します。
「Volume Multiplier」は音量に掛ける係数です。1.0でそのままの音量で再生されます。
「Pitch Multiplier」はピッチに掛ける係数です。1.0でそのままのピッチで再生されます。
「Start Time」はSEアセットのどの時間から再生するかを指定します。
1.0を指定するとSEアセットの1秒目から途中再生されます。
「Attenuation Settings」には「Sound Attenuation」アセットを指定します。
これについては後述で説明します。
「Concurrency Settings」についてはよくわかりませんでした。

・新規:SOUND CONCURRENCY (サウンドの並列処理)
https://www.unrealengine.com/ja/blog/unreal-engine-4-11-released

おそらく上記サイトに書かれている「Sound Concurrency」についてだと思うのですが、
そのうち詳しく調べてみたいですね。

公式ドキュメントはこちらに。

・Play Sound at Location
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Audio/PlaySoundatLocation/index.html

SEアセットとして指定するものは
アセットにWaveファイルなどを登録することで指定できるようになります。
SE再生002
参考にさせていただいたサイトにあるファイルを登録するとこんな感じですね。

ここまで「Play Sound at Location」ノードにいろいろ設定してきましたが、
どうもこれだけでは特に位置を変えても鳴り方は変わりませんでした。
調べてみたところ「Attenuation Settings」パラメータに
適切な「Sound Attenuation(サウンド減衰)」アセットを渡してあげないといけないようです。

というわけでとりあえずは「Play Sound at Location」の説明だけでまたの機会にでも
「Sound Attenuation(サウンド減衰)」についてメモしようと思います。

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

≫ EDIT

UE4 Float型の数値を%表示文字列に変換する(As Percent)

Float 型の変数(0.45678など)の値を%表示文字列に変換する方法です。

みつまめ杏仁さんのサイトでこんな記事がありましたので参考にさせていただきました!

・UE4でパーセント表記
http://limesode.hatenablog.com/entry/2016/11/24/004724

UE4ではこんなノードも用意されてるんですね。

「As Percent」はFloat型の値を%表示の文字列に変換します。
公式ドキュメントはこちらに。

・As Percent
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Utilities/Text/AsPercent/index.html

「As Percent」のノードは結構な数のオプションがあり、
それらを変更することで有効桁数や表示形式などを変更することができます。
AsPercent000.png

以下、オプションはこんな感じになります。

「Value」は表示する数値です。今回は「1234.560」という値を指定するようにしてみます。
「Rounding Mode」は数値を丸めるルールです。たくさんあるのでまた今度ということで。
AsPercent001.png

「Use Grouping」は数値を特定の桁数ごとにまとめるかの指定になります。
チェックを入れた場合はこんな感じで表示されます。
金額の表示などがこうなると思うのですが、%表示ではたして必要になるのかはなんともです!
AsPercent002.png

「Minimum Integral Digits」は整数部の最小桁数になります。
これを2以上にすることで「%02d」などと同じ表現ができます。
AsPercent003.png
上記画像は「Minimum Integral Digits」を4に指定したときです。

「Maximum Integral Digits」は整数部の最大桁数になります。大体デフォルトでよさそうです。

この後の二つはちょっと自分としてはわかりづらかったところです。

「Minimum Fractional Digits」は小数部の最小桁数になります。
最小桁数なのでデフォルトでは0が入っています。
3をしているすると、強制的に少数点第三位まで文字列が作成されます。
値を変更してみると「Maximum Fractional Digits」とほぼ同じような挙動になるのですが
最大の違いは末尾の0が表示できるというところでしょうか。
AsPercent004.png
こんな感じで末尾の数値が0でも文字列として変換されます。
値が何であれ強制的に小数の桁数分文字列を作成するといったものです。

「Maximum Fractional Digits」は小数部の最大桁数になります。
最大桁数なので、3を指定すると少数第三位まで最大で文字列が作成されます。
こちらは「Minimum Fractional Digits」と違い、
末尾が0の場合は文字列として作成されなくなります。
AsPercent005.png

といった感じで「As Percent」はFloat型の数値から%表示系の文字列への変換で
結構な便利オプションが用意されているので、いい感じに使えると思います。

| UE4 | 12:58 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE4 %.2fのように有効桁数を指定してFloat型の数値から文字列を取り出す(To Text (float))

ツイッターでこういうやりとりを見かけたのでメモです。

確かに!
と思ったので「To Text(float)」について調べてみました。

「To Text(float)」はFloat型の値をText型に変換します。
公式ドキュメントはこちらに。

・ToText (float)
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Utilities/Text/ToText_float/index.html

「To Text(float)」のノードは結構な数のオプションがあり、
それらを変更することで有効桁数や表示形式などを変更することができます。
ToText003.png
以下、オプションはこんな感じになります。

「Value」は表示する数値です。今回は「1234.560」という値を指定するようにしてみます。
「Rounding Mode」は数値を丸めるルールです。たくさんあるのでまた今度ということで。

「Use Grouping」は数値を特定の桁数ごとにまとめるかの指定になります。
チェックを入れた場合はこんな感じで表示されます。
金額の表示などに使えそうですね。
ToText005.png

「Minimum Integral Digits」は整数部の最小桁数になります。
これを2以上にすることで「%02d」などと同じ表現ができます。
ToText007.png
上記画像は「Minimum Integral Digits」を6に指定したときです。

「Maximum Integral Digits」は整数部の最大桁数になります。大体デフォルトでよさそうです。

この後の二つはちょっと自分としてはわかりづらかったところです。

「Minimum Fractional Digits」は小数部の最小桁数になります。
最小桁数なのでデフォルトでは0が入っています。
3をしているすると、強制的に少数点第三位まで文字列が作成されます。
値を変更してみると「Maximum Fractional Digits」とほぼ同じような挙動になるのですが
最大の違いは末尾の0が表示できるというところでしょうか。
ToText009.png
こんな感じで末尾の数値が0でも文字列として変換されます。
値が何であれ強制的に小数の桁数分文字列を作成するといったものです。

「Maximum Fractional Digits」は小数部の最大桁数になります。
最大桁数なので、3を指定すると少数第三位まで最大で文字列が作成されます。
こちらは「Minimum Fractional Digits」と違い、
末尾が0の場合は文字列として作成されなくなります。
ToText011.png

といった感じで「To Text」は数値から文字列への変換で
結構な便利オプションが用意されているので、いい感じに使えると思います。

「To Text」は型ごとにこんな感じで存在しているのでいろいろと使えて便利そうですね。
ToText000.png

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

≫ EDIT

UE4 画面やログへのデバッグ文字列の表示(Print Text)

画面やログへのデバッグ文字列の表示方法です。

・画面やログへのデバッグ文字列の表示(Print String)
http://kagring.blog.fc2.com/blog-entry-120.html

上記の「Text」版ですね。「String」型のものは上記ページで説明しています。
ちょっとText型について触れることがあったので別途作ってみました。

「Print Text」ノードを使うことでこんな感じで画面に文字列を表示することができます。
PrintText001.png

ノードはこんな感じになっています。
「In Text」 の内容を表示しています。
PrintText000.png

「Print to Screen」で画面に表示。
「Print to Log」でログに表示。
「Duration」は表示する時間。1.0 だと1秒みたいです。
「Duration」を 0.0 にすることで、そのフレームだけ表示することができます。
ほとんどの場合は 0.0 でよさそうですね。

公式ドキュメントはこちらに。

・Print Text
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Utilities/Text/PrintText/index.html

「String」と「Text」をうまく使っていくのがよさそうです。

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

| PAGE-SELECT | NEXT