おでんブログ

ゲームデザイナーな自分がUE4でつまづいたところを記録していくブログ

スポーンしたアクターが動かない

スポーンさせたアクターに重力が働かなかったり、SetWorldTrasformでも動かせないケースがあったので備忘録。

とくにAIをもつCharacterでもなくただのActorが動かない…。

 

調べてもAIを持つ敵キャラクターをスポーンさせたときに動かないケースばかりで

ここまで単純な問題はあまり取り上げられてない。

 

で、いろいろ試した結果、

原因は単純にMobilityの設定がStaticになっていただけ。

Defaultの設定でMovableに設定しているのに、SpawnActorでスポーンさせるとMobilityがStaticになってしまうみたい。Actorを動かすやつおらんやろと思われてデフォルトでそうなってるのかな。

ActorクラスでなくCharacterクラスを使っていればそういうことも起きないのかも。

 

Mobilityの変更はSet Mobilityを使う。

f:id:marutoku-oden:20210123163612p:plain

 

UVスクロールする

[Ver 4.26.0]

シンプルな2Dアクションゲーム用に背景をスクロールさせる。

UVスクロールでやるけど、便利そうに見えたPannerは等速でしか使えないらしく、断念。

UV座標を直接入力することでみんな回避しているらしいのでそうしてみる。

【準備】
  • プロジェクトはテンプレートから2Dサイドスクロールを選択
  • テンプレートで用意されている背景とプレイヤーキャラクターを使用

f:id:marutoku-oden:20210115105228p:plain

2Dサイドスクロールのテンプレートの初期画面
【もくじ】
  1. マテリアルを新規作成してUVスクロールする設定にする
  2. マテリアルパラメータを外部(ブループリント)から変更できるようにする
  3. ブループリントからパラメータを変更してスクロールさせる

 

1.マテリアルを新規作成してUVスクロールする設定にする

コンテンツブラウザ上で右クリックしてマテリアルを新規作成する。

適当に名前を付ける。ここでは[BackGround_M]とした。

↓作成したマテリアルを開いてBlendModeとShadingModelを設定。

f:id:marutoku-oden:20210115113150p:plain

 

マテリアルの設定を下記のように設定。

f:id:marutoku-oden:20210115112318p:plain

TextureSampleはお好みの背景テクスチャで。ここではテンプレートの[2DBackground]を使用。

TexCoordはUV座標の基本的な値を出力してくれて、これを加工するとUVスクロールさせることができるらしい。

 

【つまづきポイント】

  • [0]のノードはどうやって出すのか…?

☞右クリック→「constant」と入力/選択すると出てくる

【いまだにわからないポイント】

  • Constant2つをAppendするとVec2で出力されるであってる?
  • なぜTexCoordにVec2を足すとUV座標が動くのか?
2.マテリアルパラメータを外部(ブループリント)から変更できるようにする

f:id:marutoku-oden:20210115112559p:plain

AppendのAにつながっているConstantを右クリックしてパラメータに変換。

これでブループリントから値を入力することができる。

名前も分かりやすく「PosX」に変更しておく

f:id:marutoku-oden:20210115112822p:plain

次に、 背景オブジェクト[Background_Sprite]をブループリントとして開く。

f:id:marutoku-oden:20210115170317p:plain

↓コンストラクションスクリプトにこちらを追加

f:id:marutoku-oden:20210115171454p:plain
[CreateDynamicMaterialInstance]はマテリアルインスタンスを作成するノード。さっき作った[Background_M]を指定する。

作ったマテリアルは変数に格納しておく。

[SetMaterial]で自分自身にマテリアルインスタンスを設定する。

これで作ったマテリアルがオブジェクトに反映されるはず。

3.ブループリントからパラメータを変更してスクロールさせる

まずは簡単にこんな感じ。

f:id:marutoku-oden:20210115171840p:plain

[SetScalarParameterValue]でマテリアルに値を入力する。

ParameterNameを忘れずに[PosX]に変更

GetWorldDeltaSeconds(TickのDeltaSecondsでもいい)を素直に足していってValueに入力。

これで背景がスクロールする。

UVPosの値を変化させればPannerでできなかった加速度的なスクロールができる。

 

参考

UV座標系 | CG用語辞典 | CGWORLD Entry.jp

もんしょの巣穴blog [UE4] マテリアルノードの解説 その2

Panner Speed Control - Unreal Engine Forums

マテリアル ホットキー

2021年1月14日 [ver 4.28.0]

UE4のマテリアルホットキーの備忘録

・ホットキーを押しながら左クリックでノードが出てくる。

[A] Add

[B] BumpOffset

[C] Comment

[D] Divide

[E] Power

[F] MaterialFunctionCall

[I] If

[L] LinearInterpolate

[M] Multiply

[N] Normalize

[O] OneMinus

[P] Panner

[R] ReflectionVector

[S] ScalarParameter

[T] TextureSample

[U] TexCoord

[V] VectorParameter

[1] Constant

[2] Constant2Vector

[3] Constant3Vector

[4] Constant4Vector

[[Shift]押しながら[C]キー] ComponentMask

UE4でキャラクターに軌跡(トレイルエフェクト)をつける

UE4では銃で撃った弾の弾道や、キャラクターが移動した軌跡を

RibbonDataというタイプのパーティクルエフェクトで表現することができます。

こんな感じの軌跡をつけていきます。

f:id:marutoku-oden:20200121193903p:plain

 

 

手順としてはこんな感じ

  1. セットアップ
  2. RibbonDataのパーティクルを作る
  3. 軌跡を出したいキャラクターでパーティクルをスポーン(生み出す)させる。
  4. パーティクルを整える

1.セットアップ

UE4 のバージョンは 4.24 、サードパーソンのテンプレートを使っています。

f:id:marutoku-oden:20200121183325p:plain

テンプレートを選ぶ

 

2. RibbonDataのパーティクルを作る

まず新規でパーティクルデータを作ります。

f:id:marutoku-oden:20200121183655p:plain

新規でパーティクルを作る

作ったパーティクルを開いて、

下図のようにエミッタのタイプデータをRibbonDataに変えます。

f:id:marutoku-oden:20200120180425p:plain

RibbonDataにする

 

3.軌跡を出したいキャラクターから作ったパーティクルを生み出す。

今回はブループリントで生み出してみます。

 

ThirdPersonCharacterのブループリントを開きます。

テンプレートそのままならここにあるはず↓

コンテンツ>ThirdPersonBP>Blueprints

 

イベントグラフのBeginPlayでSpawnEmitterAttachedを呼び出して

EmitterTemplateの欄には先ほど作ったパーティクルを指定。

AttatchToComponentにはキャラクターのMeshを渡します。

f:id:marutoku-oden:20200120181724p:plain

BluePrintでRibbonDataパーティクルを生み出す

これだけですでに

f:id:marutoku-oden:20200120182059p:plain

こんな感じで軌跡っぽいものが出るはず。

デフォルトのテクスチャだし、もにょもにょしてるけど…

 

 

4.パーティクルを整える

さすがに見た目がひどすぎるので整えていきます。

でも面倒なのでテクスチャは使いません。

 

では、まずマテリアルを作ります。

パーティクルの時と同じように、新規でマテリアルを作ります。

f:id:marutoku-oden:20200121190206p:plain

新規でマテリアルを作る

マテリアルの設定画面はこんな感じ。

f:id:marutoku-oden:20200121190626p:plain

マテリアルの設定画面

ここの詳細タブで下図のように

BlendModeとShadingModelを変更します。

※ひとつだけある茶色いノードをクリックすると下図の設定を編集できます。

f:id:marutoku-oden:20200121191206p:plain

BlendModeをTranslucentに変更

f:id:marutoku-oden:20200121191243p:plain

ShadingModelをUnlitに変更

カスケード(パーティクルエディタ)でパーティクルの色を変えられるように

ParticleColorを下図のようにつなぎます。

f:id:marutoku-oden:20200121191641p:plain

ParicleColorのRGBとAをつなぐ

 

できたらこのマテリアルをパーティクルに設定していきます。

f:id:marutoku-oden:20200121192016p:plain

作ったマテリアルをセット

・パーティクルの設定を変更していきます。

まず色が気になるので

ColorOverLifeの値を変えます。僕は紫にしてみました。

f:id:marutoku-oden:20200121193516p:plain

サイズも大きすぎたのでInitialSizeを変更します。

f:id:marutoku-oden:20200121193520p:plain

ふにゃふにゃしちゃうのをやめたいので、InitialVelocityを全部ゼロにします。

f:id:marutoku-oden:20200121193524p:plain

で、試してみるとこんなSFちっくなトレイルエフェクトがいい感じにできました。

f:id:marutoku-oden:20200121193903p:plain

 

これを利用すれば、FPSの弾の軌跡やキャラクターの動きを表現できると思います。

 

おしまい。