PaperSloth’s diary

主にゲーム開発関連についての記事を書きます。

UE4 MaterialでTextureを回転させる

環境

UE4.25.1

CustomRotatorを使用する

Engine Content内のMaterial FunctionにCustomRotatorというものがあります。

これを使うだけでTextureの回転が可能です。
f:id:PaperSloth:20200615001731p:plain

引数について
・UVs : UVを渡す
・Rotation Center : 回転の中心位置
・Rotation Angle : 0-1で回転量を渡す 0.5 -> 180°, 1.0 -> 360°

使い方は簡単で180°回転させたい場合は以下のように繋ぐだけです。
上の画像が元画像で下が180°回転させたものです。
f:id:PaperSloth:20200615002338p:plain


ただし、このテクスチャをそのまま回転させるとテクスチャの繰り返し部分が見えておかしな表示になっていしまいます。
f:id:PaperSloth:20200615002836g:plain

これを修正するにはImportしたTextureを開いて
X/Y-axis Tiling MethodをWrapから「Clamp」に変更することで防げます
f:id:PaperSloth:20200615003003p:plain
f:id:PaperSloth:20200615003153g:plain

Textureを回転させる方法

Material内で回転させるためにはRotation Angleに「Time -> Frac」を渡すだけでよいです
f:id:PaperSloth:20200615003412p:plain

これはTimeの小数点部分だけを渡しているのですが
何をしているのかを見ていきましょう

先ずは以下のようにTime -> Fracした値を「DebugScalarValues」に繋ぎます。
f:id:PaperSloth:20200615004309p:plain

続いて「DebugScalarValues」ノードの上で右クリックして「Start Previewing Node」を選択します
f:id:PaperSloth:20200615003654p:plain

すると以下のように小数点部分が0から0.9999999までカウントされていることがわかります。
こうすることでRotation Angleの0-1の範囲に収まった上で回転させることができます
f:id:PaperSloth:20200615003803g:plain

最後にMaterial Instance側で調整しやすいように「ScalarParameter」を追加し、「RotationSpeed」としておきました
f:id:PaperSloth:20200615004455p:plain

これを応用することで以下のようなクルクル回転するロックオンカーソル等が作成できます
f:id:PaperSloth:20200615001622g:plain