LoginSignup
2
1

More than 3 years have passed since last update.

Unreal Engine 4.24 で近づくと動く物体を作る(外部のアクターを参照する)

Last updated at Posted at 2020-05-29

趣旨

Blueprint を編集中のアクターとは別の、外部のアクターのイベント (ターゲットが self ではないイベント)を参照する方法について、公式のドキュメントがいくつか存在していて、うまくいくものとそうでないものがあったのでメモしておく。

結論から書くと、上の公式ドキュメントの方法で、UE 4.24 ではうまくいった。

前提

  • Windwos 10 Home
  • Unreal Engine 4.24
  • Third Person サンプルを使ってプロジェクトを作成

やること

  1. 近づくと上方向に開く物体を作る。
  2. 近づいたという判定は、動く物体と別の「ボックストリガー」を使う。
  3. 「ボックストリガー」の Overlap イベントを拾って、トリガーの範囲に入ると物体が上に動き、範囲外に出ると元に戻るようにする。
  4. 物体の動きは Timeline で作る。

この過程の 3. のところで、外部のアクターを参照する必要がでてくる。

手順

サードパーソンサンプルでプロジェクトを初期化する

サンプルの中にある CubeMesh を動く物体にすることにする。

CubeMesh を囲むように BoxTriger を置く

image.png

左のパネルの「基本」からボックストリガーを選んで、メイン画面内にドラッグろろっぷする。

image.png

サイズと位置を調整して、CubeMesh が中に入るようにする。自キャラが一部でも橙色の枠に入れば反応する(Overlapイベントが発生する)。高さはそんなになくてもいい。

これでアクターの配置は終わり。

CubeMEsh のブループリントを作成

image.png

CumeMesh を選択した状態で、右側にある「ブループリント/スクリプトを追加」を押す。

image.png

このパネルが出たらこのままで「ブループリントを作成」を押す。

image.png

ブループリントを編集するウィンドウが出たら、「イベントグラフ」のタブを押してこの画面にする。

image.png

左側の「変数」の横にある「+」を押して、変数を作成する。名前を BoxTrigger としておく。

image.png

作った BoxTrigger という項目を選択すると、右側に変数の「詳細」が表示されるので「変数の型」と書かれたプルダウンメニューを押す。

image.png

メニューの中から「オブジェクト」「Actor」「Object Reference」を選ぶ。

image.png

すると、こんな感じで右側の「詳細」の下のほうに緑色の矩形の中に+が白く書かれたボタンがたくさん出現する(はず)。

image.png

こうなったら、詳細の中にある「インスタンス編集可能」にチェックを入れる。これをしないとコンパイル後にする操作ができない

image.png

チェックを入れたら、上のメニューの一番左にある「コンパイル」を押す。

image.png

これでメインのウィンドウに戻って、CubeMesh_Blueprint を選んで、下の「詳細」のパネルの中を探すと、「デフォルト」というパネルの中に Box Trigger という項目が増えているはず。

image.png

この Box Trigger のプルダウンメニューから TriggerBox (最初にレベルに追加したボックストリガー)を選ぶ。このデフォルト値の設定がとても重要。

image.png

これで、CubeMesh_Blueprint の中で TriggerBox のイベントを拾うことができるようになる。

image.png

ついでに CubeMesh_Blueprint のトランスフォームの「可動性」を「ムーバブル」にしておく。これもとても重要。これをしないと、いくらプログラムを書いてもアクターは動いてくれない。

BoxTrigger の範囲に入ったら発火するイベントを設置する

image.png

CubeMesh_Blueprint のブループリントエディタを出す。

image.png

変数の BoxTrigger を選ぶと、右側の詳細の中に「イベント」が表示されるので、その中にある On Actor Begin Overlap という項目を探して、その右側の緑色のボタンを押す。

image.png

すると、Target が BoxTrigger になった OnActorBeginOverlap イベントが追加される(はず)。

image.png

同様にして、OnActorEndOverlap イベントを設置する。これで、BoxTrigger の範囲にプレイヤーが入ったり出たりしたときに、これらのイベントが発火するようになる。

ここまでで、この記事の主目的は達成されているのだけど、以下物体が動くところまで一応説明しておく。下記でやっていることを、位置の表現を float じゃなくて Vector でやってるところが違うだけ。

ゲーム開始時に CubeMesh の初期位置を変数を保存する。

image.png

こんな感じでグラフを作る。

  • 「変数」で DefaultValue という名前の変数を作り、変数の型を Vector にする。
  • DefaultValue をイベントグラフの中にドラッグドロップして `SetDefaultValue" を選ぶ。
  • イベントグラフの中で右クリックして GetActor と検索で打ち込むと、GetActorLocation という関数が出てくるので、それを選んで配置する。

あとは図のようにつなぐ。

Timeline で CubeMesh の動きを作る。

image.png

イベントグラフで右クリックしてメニューを出して、Timeline と入力すると、一番下に「タイムラインを追加する」というメニューが出るのでそれを選ぶ。

image.png

タイムラインが追加されたら、ダブルクリックしてグラフを変数する。

image.png

タイムラインを開いたら、ベクタートラックを追加する。

image.png

今回はZ軸(縦方向)にだけ動かしたいので、Z軸以外は非表示かつロックしておく。こうしておかないと、X軸が優先的に編集されるモードになってしまって、Z軸にポイントを追加することができない(他の方法あるのかな?)。

image.png

Shift+クリックでポイント追加できる。追加したポイントはドラッグして動かせる。ポイントを選択すれば、時間と値を直接入力することもできる。

時間が長すぎる場合は、「長さ」のところに数字を入れて、アニメーションの長さを変更する。ここでは2(秒)に変更してある。

ここまで、動かすだけなら問題ないのだけど、動きが直線的になってちょっといやなので、曲線かしてみる。

image.png

ポイントの上で右クリックすると、グラフを直線化したり曲線化できるメニューが出る。ここでは Auto を選んでみる。

image.png

水色の線を動かすと、曲線の曲がり方を調整できる。

image.png

曲がり方がいまいちなので、キーフレームを増やして曲線を調整してみた。このあたりは好みで…

Timeline の値を使って CubeMesh の位置を変更する

image.png

あとはこんな感じで動く(雑)。Speed 変数には、デフォルトで 100 の値を入れておく。Unreal Engine 4 で正確に往復移動するオブジェクト(アクター)を作る でやってることとだいだい同じ。

image.png

これで、箱に近づくと箱が上に移動して、離れると箱が下がるはず。

余談

TriggerBox を Blueprint クラス化して、TriggerBox_Blueprint としておいてから CumeMesh_Blueprint の変数として、直接 TriggerBox_Blueprint を選んでもいけそうな気がするのだけど、どうしてもうまくいかなかった。

image.png

こうして TriggerBox で「プループリント/スクリプトを作成」してから、

image.png

このように Triggerr Box Blueprint をダイレクトに参照すしようとすると、イベントが発火してくれない。Trigger Box Blueprint のほうを直接編集して OnActorBeginOverlap イベントの先に PrintText とかつなげると、ちゃんと Hello と表示されるので、イベント自体が拾えてないわけではなさそう(GenerateOverlapもチェック入れてるし)。

デフォルト値に TriggerBoxBlueprint を指定してもイベントは発火しない。何かちょっとした設定の問題なのか、根本的に誤っているのかよくわからない。

余談2

上記問題は、変数を「インスタンス編集可能」にして、メインウィンドウ側でデフォルト値を設定するとうまくいくようだ。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1