凛(kagring)のUE4とUnityとQt勉強中ブログ

2016 年から UE4 を触り始めました。勉強したもののメモ用のブログです。C++ での Qt、Unity も少しあります。

2016年12月 | ARCHIVE-SELECT | 2017年02月

| PAGE-SELECT |

≫ EDIT

UE4 Light SourceとSkySphereBlueptintとAtomospheric Fog

「Light Source」と「SkySphereBlueptint」や「Atomospheric Fog」 について全然わかってないのでメモ。
随時更新予定です。

・公式ドキュメント指向性ライト
https://docs.unrealengine.com/latest/JPN/Engine/Rendering/LightingAndShadows/LightTypes/Directional/index.html

・公式ドキュメントAtomospheric Fog に関するユーザーガイド
https://docs.unrealengine.com/latest/JPN/Engine/Actors/FogEffects/AtmosphericFog/index.html

・Unreal EngineのSky SphereやAtmopsheric Fogを使った空の背景の設定&Light Sourceを使った光の当て方 (1/2)
http://www.atmarkit.co.jp/ait/articles/1508/04/news021.html

・Unreal EngineのSky SphereやAtmopsheric Fogを使った空の背景の設定&Light Sourceを使った光の当て方 (2/2)
http://www.atmarkit.co.jp/ait/articles/1508/04/news021_2.html

とりあえず一対でワンセットなのでしょうか。
日本語でこれらについて詳しく役割が書いてあるサイトやブログなどがあるといいなぁ。
スポンサーサイト

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

≫ EDIT

UE4 太陽の位置を動的に動かして昼夜などの時間変化や影を制御する(Update Sun Direction、Light Source、SkySphereBlueprint)

「Light Source」「SkySphereBlueptint」 を使って
太陽の位置を動かして、昼夜などの時間変化や影の方向を制御する方法です。

「Light Source」と「SkySphereBlueptint」についてはわからないことが多すぎるので
別途どこかで調べようと思います。

とりあえずは、こちらのサイトを参考にやってみました。

・「Unreal Engine」動的に時間経過させる・太陽(影)の位置を変える
http://shivat.hatenablog.com/entry/2017/01/20/163644

手順としてはこんな感じでした。

Light Source(Directional Light)のトランスフォームをスタティックからムーバブルに変更。
太陽を動的に動かす000

次に、SkySphereがあるか確認してください。

ということで「SkySphereBlueptint」があるかどうかを確認しました。
太陽を動的に動かす001
太陽を動かすには「Light Source」と「SkySphereBlueptint」が必要みたいですね。

あとは「Light Source」に対して「AddActorLocalRotation」ノードなどで太陽の角度を変更してあげます。
太陽を動的に動かす002
「Light Source」と「SkySphereBlueptint」をアウトライナからドラッグ&ドロップして使いましょう。
最後に、「Update Sun Direction」ノードを呼んであげないと反映されないようです。
ターゲットには「SkySphereBlueptint」を渡してあげましょう。

と、一応これだけでこんな感じになるようです!
(試したけど動画をとれなかったのでこちらを)

時間制御のチュートリアルの動画があるようです。


こういうのが簡単にできるのはほんとエンジンすごいなって思います。

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

≫ EDIT

UE4 UMGでImageウィジェットの画像をTextureで差し替える(Set Brush from Texture)

UMG のImage ウィジェットの画像をTextureから置き換える方法です。
こちらのブログを参考にしました。

・UE4で外部ファイルを扱ってみる
http://eaglegames.hatenablog.com/entry/2015/12/21/163309

まずはUMGでImageウィジェットを配置します。
UMGテクスチャをイメージに001
とりあえずは検証なので中身は空にしておきます。

これをブループリントで扱えるように外に出しておきます。
UMGテクスチャをイメージに002

テクスチャとして今回は「Download Image」をつかって
ツイッターアイコンをTextureとして持ってきます。
イメージのダウンロード001

このTextureをImageに反映させるには「Set Brush from Texture」ノードを使います。
UMGテクスチャをイメージに000
こんな感じになります。
「Texture」にはTextureを。
「Target」にはImageを渡してあげます。

実行するとこんな感じに。
イメージのダウンロード000
無事UMGのImageの画像が置き換わりました。

ゲームにUMGを実装すると動的に画像を変更することが多くなりそうなので
結構使いそうなノードになりそうですね。

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

≫ EDIT

UE4 画像ファイルをURL指定でダウンロードする(Download Image)

画像ファイルをURL指定でダウンロードする方法です。
ダウンロードした画像ファイルはテクスチャにして利用できたりします。

こちらを参考に。

・UE4で外部ファイルを扱ってみる
http://eaglegames.hatenablog.com/entry/2015/12/21/163309

方法はすごく簡単で「Download Image」ノードを使うだけです。
イメージのダウンロード001
とりあえず自分のツイッターのアイコン画像をダウンロードしてみました。

ダウンロードできたかを確認するためにUMGのイメージを差し替えて表示してみました。
イメージのダウンロード000

無事表示できたみたいです。
ここらへんのUMGでの使い方はまた別途ということで。

ユーザー毎の何かイメージを自由に設定するような場合に重宝しそうですね。

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

≫ EDIT

UE4 コントローラー(スマホ)の振動と停止(Client Play Force Feedback、Client Stop Force Feedback)

コントローラーやスマホを振動させるための方法です。

詳しくはこちらを参考にするといいと思います!

・【UE4】コントローラを振動させる
http://dfkfuturelab.hatenablog.com/entry/2017/01/07/222913

コントローラーを振動させるには「Client Play Force Feedback」ノードを使います。
コントローラー振動000

・ForceFeedbackEffect……振動のパターンプリセット
・Looping……振動パターンがループするか否か
・Tag……タグを持たせたい時に使う

「ターゲット」には「Player Controller」を渡してあげます。
「Force Freedback Effect」に渡すものはアセットとして作成したものを渡す必要があります。

「Force Freedback Effect」は
「新規作成」⇒「その他」⇒「フォースフィードバックエフェクト」で作成します。
コントローラー振動002

こんな感じのアセットができあがります。
コントローラー振動001

作られた「Force Freedback Effect」アセットをダブルクリックすると詳細ウィンドウが開きます。
この画面で振動の時間と強さを設定することができます。
コントローラー振動004

グラフで横・時間にたいする縦・振動の強さを描きます。

グラフ上で右クリックででるメニューからキーを打っていきましょう。

あとは「Client Play Force Feedback」ノードの
「Force Freedback Effect」パラメータに作った「「Force Freedback Effect」」を指定します。
すると簡単にコントローラーが振動しました! やったね。

コントローラー振動を停止させるには「Client Stop Force Feedback」ノードを使います。
コントローラー振動003
これだけで簡単に止まります。

公式ドキュメントはここになります。

・Client Play Force Feedback
https://docs.unrealengine.com/latest/INT/BlueprintAPI/Game/Feedback/ClientPlayForceFeedback/index.html

ここのタグの説明を翻訳に流してみてみると

A tag that allows stopping of an effect. If another effect with this Tag is playing, it will be stopped and replaced
エフェクトの停止を許可するタグ。 このタグを持つ別のエフェクトが再生されている場合、それは停止され、置き換えられます

とありました。
タグ名を指定することで、そのタグの振動だけを止めたりできるようです。

大福未来研究所でも書かれている下記のブログを見る感じですと
普通に上記の方法でスマホも振動するみたいですね。

・ゲームパッドの振動とスマートフォンの振動は同じノード
http://imoue.hatenablog.com/entry/2016/01/31/224343

こういった処理が簡単にできるのはエンジンの恩恵ですね。

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

≫ EDIT

UE4 エディタ拡張・ウィジェットを変数として扱う・格納する(SAssignNew)

ウィジェットを変数として扱えるようにして、ウィジェット同士の連携をとったりする方法です。
詳しい方法はロジカルビートさんの以下のブログを参考に!

・【UE4】エディタ拡張(インプットボックス編)
http://logicalbeat.jp/blog/875/

エディタで文字列や数値入力が出来るようになったので、
その入力値を使って他のウィジェットやゲーム内のパラメータに動的に反映できるようにしたいです。
そのためには、ウィジェットの値を取得・設定できる必要があります。
そこで、SAssignNewを使用してウィジェットを変数として保持し、
ウィジェットにアクセスできるように変更します。
使い方以下のような形で、今まで使用していたSNew()の部分を置き換えるだけです。

といった感じで、今まで 「SNew」を使っていた部分を「SAssignNew」に変更します。

SNew は「SNew(型名)」でしたが
SAssignNew は「SAssignNew(変数名、型名)」となります。

SNew(SSpinBox< float>)

といったものが

TWeakPtr< SSpinBox< float> > mSpinBoxWidget;
SAssignNew(mSpinBoxWidget, SSpinBox< float>)


といった記述になります。

TWeakPtr< SEditableTextBox> mEditableTextBox;
~省略
+SVerticalBox::Slot()
.AutoHeight()
[
SAssignNew(mEditableTextBox, SEditableTextBox)
.Text(LOCTEXT("EditText", "SEditableTextBox"))
]

こんな感じですね。

変数にしたウィジェットでのアクセスの方法はこんな感じになります。

変数.Pin()->関数()

TWeakPtr< SSpinBox< float> > mSpinBoxWidget;
mSpinBoxWidget.Pin()->SetValue(1234.5f);

こんな感じで関数にアクセスすることができます。

エディタ拡張するにあたっては必須になりそうですね。

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

≫ EDIT

UE4 配列変数の作成

配列の変数の作成方法です。
ちょっと触ってなかったらど忘れしまったのでメモ。

詳しい説明はこちらを。

・ブループリントの配列
https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/UserGuide/Arrays/index.html

まず、普通に変数を作成します。こんな感じですね。
配列変数000
今回はActorクラスの変数を作ってみました。

そうしたら、作った変数を選択して詳細タブを確認します。
配列変数001
そうすると、「変数の種類」のところにクラス名と「3x3の格子状のアイコン」があります。
このアイコンをクリックすると配列の変数となります。

アイコンをクリックした結果がこちら。
配列変数002
変数の種類のクラス名の左にあるアイコンが、配列かそうでないかを示しています。

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

| PAGE-SELECT |