Long distance to the dream

UE4+ゲームのお話。Bloggerからの移転です→https://ue4gaming.blogspot.jp/

【UE4】UVのスケール拡大、位置をずらす

ネットで調べてもあまり情報が出てこなかったので書いてみました。

 

テクスチャのUVを変えるのに「TextureCoordinate」というノードをよく使います。

このノードはプロパティを見ると「UTiling」と「VTiling」とあってテクスチャをタイリングするためのノードなのですが、タイリングの数を増やしたり減らしたりすることでUV、テクスチャのサイズを調整することができます。

 

またUVチャンネルををRとGチャンネルに分割してそれぞれのチャンネルに値を加えることでUVの位置をずらすことが可能です。

 

スタート時の状態

f:id:Resonant:20180112125012p:plain

 

次にキャラクターのテクスチャにTextureCoodinateノードをつなげます。

f:id:Resonant:20180112124919p:plain

TextureCoodinateを繋げてUTiling、VTilingの値を変えると(例えばUTiling 2、VTiling 2にすると)UVが分割されて画像が小さくなります。この際分割されることでもともと正面にあったキャラクターの位置が四隅にバラけてしまいました。

 

キャラクターの位置を中心に置くようにするためこのUV情報に変更を加え位置を調整します。

手順を先に述べると、最初にTextureCoodinateのUVチャンネルを分割して個別のチャンネル毎に値を変更できるようにします。この分割されたチャンネルにAddノードを加え一方のインプットにParameterで任意の数値を加えられるようにします。

このParameterは位置をずらすパラメーターなのでX_Position,Y_Positionと名付けます。

そして次にこの分割されたチャンネルをまた一つのチャンネルに統合します。

 

調整後のノードの構成は以下になります。

f:id:Resonant:20180112132049p:plain

UVチャンネルの分割には「BreakOutFloat2Components」ノードを使います。このノードはアウトプット名から分かるようにRとGチャンネルに分割します。

RとGはUとVどちらに対応しているのか確認してみて下さい。

 

そしてそれぞれのチャンネルにAddを加えScalar Pramノードを作ってそれぞれの位置を調整できるようにします。

あとは「MakeFloat2」で再度一つに統合するだけです。

 

最後に、テクスチャのスケールもパラメーターでまとめて変更できるようにノードを組んでみました。

f:id:Resonant:20180112133127p:plain

 

 おわり

 

Pawn CharacterをAI Controllerで動かす

Pawn Characterを新しく作ったAI Controllerで制御したい場合、そのPawn Character側でAI Controllerの設定をする必要がある。

 

(Character BP内の(self)から)

f:id:Resonant:20171211220517j:plain

 

これをしないとせっかくAI Controller BP内で関数を作って他のBP内からAI Controllerを呼び出そうと思ってもControllerからこのAIControllerがCastされないのでキャラクターが動かない原因にもなります。

 

【UE4】移動方向に対するキャラクターとカメラの回転 / Controller rotation setting for character and camera

アクションゲームでキャラクターとカメラの回転の動きを作るのに非常に悩んだことがあります。カメラは回転させるがプレイヤーキャラは回転させない、キャラクターとカメラが同じ方向を向いているとき移動方向に対してキャラを回転させないなどです。

後者は一部BPで組む必要はありますが単純にカメラ、キャラクターの回転をどのようにさせるかだけだとBPを特別に組む必要はありません。

 

苦労した理由はそれらがBP内でノードを組んで作るものではなくComponentの設定でプロパティのどれにチェックを付けるか付けないかで決まったからです。

ずっとノードで組もうとして色々やってもほとんど意味がなかったわけですね。。

 

内容がもしかしたら不正確な部分もあるかもしれません。その場合指摘していただけると幸いです。

 

説明にはThirdPerson templateを使用していますが使用しているキャラクターはアニメーションスターターパックに入っている「Ue4ASP_Character」を使っています。

 

アニメーションスターターパック

www.unrealengine.com

 

まず前提としてコントローラーの回転は以下のように組んでいるものとします。

f:id:Resonant:20171120153830j:plain

 

TurnはマウスのX軸方向の動きを入力としてLookUpはY軸になっています。

Controllerからの入力はPawnキャラクターそしてカメラを実質動かしているCamera Boom(Spring Arm)はCapsuleComponentから取得しているはずです。

 

f:id:Resonant:20171120154316j:plain

 

キャラクターとカメラの回転には以下の3つのコンポーネントが関わっています。

・(self)

・CameraBoom (SpringArm)

・CharacterMovement

f:id:Resonant:20171120154740j:plain

 

まずBP名(self)をクリックしてDetailsを見るとPawnのカテゴリに

Use Controller Rotation Pitch

Use Controller Rotation Yaw

Use Controller Rotation Roll

とあるはずです。

f:id:Resonant:20171120155136j:plain

デフォルトではYawの部分のみチェックがついていると思います。これはキャラクターの回転はYaw以外ほとんど使わないということから来ているのでしょう。

 

この説明を見ると

If true, this pawn's yaw will be updated to match the Controller's ControllRotation Yaw,..

とあります。

訳すと、チェックがついているならばこのPawnキャラクターはコントローラのControlRotation Yawに合うようアップデートされる

簡単に言うとコントローラのYaw回転に合わせてキャラのYawも一緒に回転するよ

ということです。

これにチェックがついていると(基本として)以下のようなキャラの動きになると思います。

 

f:id:Resonant:20171120161737g:plain

私が欲しかった動きは上のようなものではなく、カメラがキャラクターの周りを回れるような動きでした。

説明通りチェックが付いていない場合だと、逆にキャラクターの回転はコントローラーの回転に依存していないので以下のようになります。

f:id:Resonant:20171120162113g:plain

実はUse controller Rotationのチェックが外れていても他のコンポーネントのあるプロパティにチェックがついているとキャラがコントローラーの回転に合わせて回転してしまう場合があります。それはCharacterMovementのRotationgSettingsにあるUse Controller Desired Rotationにチェックが入っている場合です。

 

とりあえずそれは置いておいて次はCameraBoom(Spring Arm)について、

Components panelからCameraBoomをクリックしてDetailsのCamera Settingsを見てみます。

f:id:Resonant:20171120165407j:plain

ここでSpring Armの回転の設定をするのですが、ここでSpring Armの回転はPawnコントローラーの回転を継承するかどうが決めることが出来ます。

チェックを全部オフにしてPlayするとカメラが全く回転しなくなります。

(キャラクターは回転しカメラが回転しない人もいればキャラもカメラも回転しない人もいるはずです)

 

カメラをControllerの入力で回転させたい場合はチェックを入れます。逆にカメラを固定させたい場合はチェックを外します。

もちろん特定の軸だけ継承するというのもできます(inherit Pitch, Yaw and Roll)

 

そして最後に一番厄介なのがCharacterMovement部分での設定です。

DetailsからCharacterMovement(Rotation Settings)を見てみます。

その中にあるOrient Rotation to Movementが重要なのですが

f:id:Resonant:20171120170739j:plain

簡単に説明するとキャラクターの移動の向きに対してキャラも一緒に回転させるというもの。

 

キーボードの↑↓←→で移動しているとすると↓を押すとキャラクターが↓向きに方向転換します(キャラが最初北向きになっている場合180度回転して南向きになる)

というふうに移動方向に合わせてキャラも回転するということです。

 

が、しかし

 

説明文の最後にこう書いてあります。

 

Nomally you will want to make sure that other setting are cleared such as UseControllerRotationYaw on the character.

 

つまり、(self) > Pawn > のUse controller Rotation Yaw(Pitch,Roll)にチェックがついてるとこちらが優先されてキャラクターは移動方向に回転しないのです。

 

まとめ

キャラクターをコントローラーの回転に合わせて回転させる場合は(self)>Use Controller Rotationにチェック

キャラクターを移動方向に合わせて回転させたい場合(CharacterMovement)>Orient Rotation to Movementにチェック、そしてUse Controller Rotationはオフ。

 

ついでにUse Controller RotationとOrient Rotation to MovementどっちもオフにしてかつUse Controller Desired Rotationにチェックを入れるとコントローラーの回転に合わせてキャラも回転します。

 

ココらへんは複雑で混乱しやすい部分なので自分で試しながら確認するほうがわかりやすいはずです。