マウスカーソルの位置方向の角度を取得する方法 ＆ コントローラーのスティックの入力角度を取得する方法

# はじめに
個人でUnrealEngineを使ってインディーゲームを開発しています Toyota Ryuto といいます。
この記事が「役に立った！」「いいと思った！」のであれば是非Twitterのフォローをよろしくお願いします！

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">新作2.5Dプラットフォーマーパズルアクションゲームのテストプレイヤー、アドバイザー募集！ <a href="https://twitter.com/hashtag/%E9%9B%86%E3%82%AD%E3%83%A3%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#集キャン</a> さんの新機能「サポートメンバー」を早速使わせていただきます！<br><br>沢山のゲームクリエイターの方にご意見、アドバイス等いただきたいと思っています！<a href="https://twitter.com/hashtag/%E6%8B%A1%E6%95%A3%E5%B8%8C%E6%9C%9BRT?src=hash&amp;ref_src=twsrc%5Etfw">#拡散希望RT</a> <a href="https://t.co/1vHoeI71ow">https://t.co/1vHoeI71ow</a> <a href="https://t.co/Z4dlbrQK05">pic.twitter.com/Z4dlbrQK05</a></p>&mdash; Toyota Ryuto (@toyota_ryuto) <a href="https://twitter.com/toyota_ryuto/status/1595613177953144832?ref_src=twsrc%5Etfw">November 24, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


# 今回の記事
ズバリ **「マウスカーソルの位置から角度を取得する方法」** **「コントローラーのスティックの入力角度を取得する方法」** です！
UnrealEngineでの実装方法が探しても見当たらなかったため、今回この記事を書かせていただきました！

具体的には👇のような動作が可能になります。（こちらは現在開発中のインディーゲームのPVです。）
マウスカーソルの方向、スティックの入力方向に目が向くようになっています！
<iframe width="560" height="400" src="https://www.youtube.com/embed/j4N-P0SmZwo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

※ブループリントオンリーで実装できる仕組みになっています。

実装方法としては、高校などで習う三角関数を使用しています。
**三角関数の知識が無くても実装可能になってますのでご安心を！**
（2点の座標から角度を求めるやつ って思ってもらえればここではOKです。）
![103095.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954555/33e6cadd-61ae-5551-ea54-515d200d87c7.jpeg)
> 引用 https://www.weblio.jp/content/%E4%B8%89%E8%A7%92%E9%96%A2%E6%95%B0

# 【実装】マウスカーソルの位置から角度を取得する方法
ここでは簡単な方法としてTickを使っていますが、入力さえ入れば大丈夫なので嫌な方は他の入力方法でも動作するかと思います！
![スクリーンショット 2022-11-29 105407.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954555/49b56d36-825b-ef99-d527-ae40cfd64566.png)
👇こちらのサイトでノードをコピーできます！（そのままエディターにペーストできます。）

https://blueprintue.com/blueprint/p01yofp5/

**これでマウスカーソルの位置角度が 変数 Mouse Direction に格納されます！**

画面の中心座標を0として、その場所に対してのマウスカーソルの座標を取得しています。
画面比率は1:1ではないので、1:1で計算するために、今回は画面の縦の大きさでお互いを割ります。
こうすることで三角関数で使える座標が出るのでこれを今回は使用しました！

# 【実装】コントローラーのスティックの入力角度を取得する方法
入力可能なBPでこちらをそのまま使っていただければ実装可能だと思います！
**※TurnRateGamepadの変数の初期値は50にしておいてください！**
![スクリーンショット 2022-11-29 103216.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954555/03ea4e65-c7b4-ccb2-205d-482487426be8.png)
👇こちらのサイトでノードをコピーできます！（そのままエディターにペーストできます。）

https://blueprintue.com/blueprint/s2ecq9i1/

InputActionの詳細はこのようになっています。
![スクリーンショット 2022-11-29 103006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954555/3f345391-4655-bc51-b67f-2dd6ff992f85.png)
**これでコントローラーのスティックの入力角度が 変数 Xbox Direction に格納されます！**

コントローラーの軸インプットは右に倒すと1、左に倒すと-1を返してくれるので、これをX座標とし
上に倒すと1、下に倒すと-1を返してくれるので、これをy座標とします。
するとこれを利用すると、コントローラーの入力具合がxとyの座標に変換できるので、これを三角関数と組み合わせて
角度を導き出すといった処理になっています！

例）
・コントローラーを右斜め上に倒す
(x,y)=(0.5 , 0.5)
・コントローラーを左に倒す
(x,y)=(-1 , 0)

# さいごに
これを用いることで横スクロールゲームやトップダウンビューのゲームで主に役立ちます！
（横スクロールアクションのブースト方向の指定やトップダウンビューの攻撃方向の指定など）

他の使い方としては謎解きゲームなんかで時計の針を動かしたりもできるかもしれませんね！

この記事が参考になりましたら、是非Twitterのフォロー等していただけますと幸いです。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">新作2.5Dプラットフォーマーパズルアクションゲームのテストプレイヤー、アドバイザー募集！ <a href="https://twitter.com/hashtag/%E9%9B%86%E3%82%AD%E3%83%A3%E3%83%B3?src=hash&amp;ref_src=twsrc%5Etfw">#集キャン</a> さんの新機能「サポートメンバー」を早速使わせていただきます！<br><br>沢山のゲームクリエイターの方にご意見、アドバイス等いただきたいと思っています！<a href="https://twitter.com/hashtag/%E6%8B%A1%E6%95%A3%E5%B8%8C%E6%9C%9BRT?src=hash&amp;ref_src=twsrc%5Etfw">#拡散希望RT</a> <a href="https://t.co/1vHoeI71ow">https://t.co/1vHoeI71ow</a> <a href="https://t.co/Z4dlbrQK05">pic.twitter.com/Z4dlbrQK05</a></p>&mdash; Toyota Ryuto (@toyota_ryuto) <a href="https://twitter.com/toyota_ryuto/status/1595613177953144832?ref_src=twsrc%5Etfw">November 24, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>