【UE4】マウスの先にPawnを配置する
タワーディフェンスを作っています。
マウスの先に兵器を配置する処理を実装するのに苦労したので、備忘録がてらまとめます。
やり方は泥臭いですが、以下の方法で実装しました。
①マウスカーソルの位置から、3D空間への衝突計算を行い、衝突した座標を取得する関数を作成(GetMouseToWorldPositionと命名)
大事なのはLineTraceByChannelです。
始点と終点の間にあるオブジェクトにhitした座標とかActorを取得できるようになります。
Start:始点
→マウスカーソルの位置をConvertMouseLocationToWorldSpaceのアウトプットWorldLocation入力
End:終点
→始点とConvertMouseLocationToWorldSpaceのアウトプットWorldDirectionの加算値
ActorsToIgnore:判定から除外するActors
イメージはこんな感じです。
終点=始点+方向×適当な距離
②ゲーム開始時にレベルブループリントでGetMouseToWorldPositionを使って、マウスに追従するPawnを生成
③Pawnについて
タワーディフェンスなので配置する位置に、その兵器の範囲を表示したいので、
Sphereを潰して円にして表示させました。
本当はパーティクル(エフェクト?)でやりたかったのですが、エフェクトを回転させることが出来ませんでした・・・。
④レベルブループリントのTickイベント毎にGetMouseToWorldPositionを呼んで、②で生成したPawnの座標を更新する。
GetMouseToWorldPositionに失敗した場合、非表示にする処理も入れています。(SetVisibility)
⑤レベルブループリントの左クリックイベント(MouseLeftXXX)がされたら、そこにPawnを生成。
⑥生成されたPawnで、範囲を示すSphereを非表示にする。
これにて、完成です!
タワーディフェンスっぽくなってきました!
この内容は私の配信で触れているので、時間があれば見てください。