LoginSignup
6
3

More than 3 years have passed since last update.

UE4でキャラクターがマウスポインタの方を向く機能を作る

Last updated at Posted at 2019-09-25

初めに

今回初めて株式会社ヒストリア様主催の「第12回UE4ぷちコン」にゲームを応募しました。
残念ながらUnrealFestでの展示にはなりませんでしたが、その中からタイトルにもある通りキャラクターがマウスポインタの方を向く機能(マインクラフトのインベントリとか?)について紹介したいと思います。

どんな機能を使うのか

まず、この機能を作るのに大まかに2つのUE4の機能を使います。
1つ目はアニメーションブループリントの「Look At」ノードです。こちらについてはalweiさんが詳しく解説されているのでこちらの記事を見て頂ければと思います。

UE4 LookAt機能を使ってGrayちゃんに見つめてもらってみる

2つ目はPlayerControllerクラスの「ConvertMouseLocationToWorldSpace」関数です。
この記事ではこの関数についてとそれを用いた実装について紹介します。

ConvertMouseLocationToWorldSpace関数について

公式ドキュメント(英語)

3.png
この関数はマウスの座標(ScreenPosition)からWorldSpaceの座標を取得する関数です。また、PlayerControllerクラスのメンバ関数なので当然引数にPlayerControllerクラスが必要です。
それではそれぞれの戻り値について見ていきます。World LocationとWorld Directionについては公式のドキュメントに何も書いていなかったので私調べになります。

  • World Location (Vector) : 現在有効になっているカメラのワールド座標
  • World Direction (Vector) : 現在有効になっているカメラの前方の向き
  • Return Value (Bool) : 正常に変換が行えたかの真偽値 (おそらく画面外にマウスポインタが居たりするとfalseになったりするのかも...?)

2.png
ライントレースで調べてみるとスクリーンからまっすぐ伸びるわけではなくコーン状に広がっていくのでWorld Directionは画面の真ん中が真正面で端に行くほど傾くようになっているのだと思います。

ざっくりまとめると現在有効なカメラの位置とForwardVectorが取得できると考えてもいいのではないでしょうか。

作ってみる

1.PNG
簡略化するために今回はアニメーションブループリントに実装します。キャラクターのクラスのTickイベントでも問題ありません。
LookAtLocation変数(Vector)にカメラの位置から正面に300cm進んだ点の座標を格納しています。今回は300にしましたが、カメラとキャラクターの位置で丁度いい値がことなるので調整してみてください。ライントレースなどと同じ要領です。
4.PNG
見る方向は求められたので、あとはLookAtノードの引数に渡すだけです。

おまけ

初めにの参考動画ではグレイちゃんをクリックで起こして、その後マウスポインタを見るようになっています。WorldSpaceに配置されたアクタをマウスでクリックしたか判定する関数もありましたのであわせてご紹介しておきます。
5.PNG
またまたPlayerControllerクラスの「GetHitResultUnderCursorForObjects」関数を使います。
こちらはLineTraceForObject関数などと同じで判定するObjectTypeを配列で指定してトレースし、HitResultのHitActorで当たったオブジェクトを取得できます。

最後に

今回ご紹介した「ConvertMouseLocationToWorldSpace」関数と「GetHitResultUnderCursorForObjects」関数は見つけた時にこんな関数もあるのか~と驚かされましたw
また、おまけで紹介した「GetHitResultUnderCursorForObjects」関数がライントレースなどと同じような処理をしてる場合どのくらい遠くまでトレースしてるのかが気になりました。内部実装を確認していないので違う方法で実装されているかもしれませんが...

6
3
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
6
3