【UE4】マウスの先にPawnを配置する

タワーディフェンスを作っています。

 

マウスの先に兵器を配置する処理を実装するのに苦労したので、備忘録がてらまとめます。

f:id:tsugumiyumeno:20200827000039p:plain

 

やり方は泥臭いですが、以下の方法で実装しました。

①マウスカーソルの位置から、3D空間への衝突計算を行い、衝突した座標を取得する関数を作成(GetMouseToWorldPosition命名

 

大事なのはLineTraceByChannelです。

始点と終点の間にあるオブジェクトにhitした座標とかActorを取得できるようになります。

 

 Start:始点

  →マウスカーソルの位置をConvertMouseLocationToWorldSpaceのアウトプットWorldLocation入力

 End:終点

  →始点とConvertMouseLocationToWorldSpaceのアウトプットWorldDirectionの加算値

 ActorsToIgnore:判定から除外するActors

f:id:tsugumiyumeno:20200827001018p:plain

イメージはこんな感じです。

終点=始点+方向×適当な距離

f:id:tsugumiyumeno:20200827002642p:plain

 

 

 

 

②ゲーム開始時にレベルブループリントでGetMouseToWorldPositionを使って、マウスに追従するPawnを生成

f:id:tsugumiyumeno:20200827000410p:plain

 

③Pawnについて

タワーディフェンスなので配置する位置に、その兵器の範囲を表示したいので、

Sphereを潰して円にして表示させました。

本当はパーティクル(エフェクト?)でやりたかったのですが、エフェクトを回転させることが出来ませんでした・・・。

f:id:tsugumiyumeno:20200827005148p:plain

 

④レベルブループリントのTickイベント毎にGetMouseToWorldPositionを呼んで、②で生成したPawnの座標を更新する。

GetMouseToWorldPositionに失敗した場合、非表示にする処理も入れています。(SetVisibility)

f:id:tsugumiyumeno:20200827004511p:plain

 

⑤レベルブループリントの左クリックイベント(MouseLeftXXX)がされたら、そこにPawnを生成。

f:id:tsugumiyumeno:20200827005723p:plain

⑥生成されたPawnで、範囲を示すSphereを非表示にする。

f:id:tsugumiyumeno:20200827005841p:plain

 

 

 

これにて、完成です!

タワーディフェンスっぽくなってきました!

 

 

この内容は私の配信で触れているので、時間があれば見てください。