［UE5］マウスカーソルを動かさずに、マウスカーソルの表示状態を切り替える

# 概要
Unreal Engine 5では、マウスカーソルの表示状態を切り替えるために「Show Mouse Cursor」の状態を切り替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/8f88e419-39bb-fa24-8a38-c135847d3ab6.png)

しかし、インプットモード（Input Mode）が「Game And UI」となっているとき、マウスカーソルの表示状態を切り替えるためには「Show Mouse Cursor」の状態を切り替えるだけでは表示状態は変更できず、マウスカーソルを動かす必要があります。
（下の動画は、左上に「Hide MouseCursor」と出た瞬間に「Show Mouse Cursor」をオフにしており、マウスカーソルが消えた瞬間にマウスを動かしています。）

<iframe width="640" height="360" src="https://www.youtube.com/embed/RhqL4eAvVKQ" title="cursorvisibility 1 1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<br><br>

この記事では、下の動画のように、インプットモードが「Game And UI」のときに、マウスカーソルを動かさずに、マウスカーソルの表示状態を切り替える処理を、C++で実装します。

<iframe width="640" height="360" src="https://www.youtube.com/embed/X3SdPj8tXr4" title="cursorvisibility 1 2" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<br><br>


また、Blueprintで、現実のマウスを動かさずにマウスカーソルの表示状態を切り替える処理を実装します。

# この記事の主な対象者
- Unreal EngineのC++初心者の方
- Blueprint（BP）の作り方の基礎を習得されている、初心者の方


# マウスカーソルの表示を切り替える処理の実装（C++）

マウスカーソルを動かさずに、マウスカーソルの表示を切り替えるための処理を書くために、最初にプログラムの「[プロジェクト名].Build.cs」ファイルを開きます。

「[プロジェクト名].Build.cs」ファイルの中に、「PublicDependencyModuleNames.AddRange」と書かれているところがあるので、その項目の中に「"Slate"」を追加します。

![addrange_slate.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/94465fde-72da-d8fc-1f99-f5761175d5e1.jpeg)<br><br>


次に、マウスカーソルの表示非表示を切り替える処理を書きたいC++ファイルを開き、下のような処理を書きます

```cpp
// コントローラを取得する
TObjectPtr<APlayerController> playerController = UGameplayStatics::GetPlayerController(this, 0);

// マウスカーソルを非表示にする
PlayerController->SetShowMouseCursor(true);
FSlateApplication::Get().OnCursorSet();
```
（上の処理は、マウスカーソルを非表示にする処理です。マウスカーソルを表示する処理を書きたい場合は、「playerController->SetShowMouseCursor(true)」に変更してください。）



上の処理を書いたら、下の動画ようにマウスカーソルが動くことなく、マウスの表示状態を切り替えることができているかを確認します。

<iframe width="640" height="360" src="https://www.youtube.com/embed/X3SdPj8tXr4" title="cursorvisibility 1 2" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


# マウスカーソルの表示を切り替える処理の実装（Blueprint）

インプットモードが「Game And UI」となっているとき、Blueprintでは、マウスカーソルを動かさずにマウスカーソルの表示状態を切り替えることはできる方法は、申し訳ないのですが筆者はわかりません。

ですのでBlueprintでは、**「Show Mouse Cursor」の状態を切り替えた後に、Blueprintの処理でマウスカーソルの座標を少しだけ動かす**ようにして、現実のマウスを動かす必要がないようにします。

「Show Mouse Cursor」の状態を切り替える処理のところに、下のようなノードを組みます。

![mousepos_movealittle.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/81b7cce1-1d7b-f5ad-6d6f-851c2e7e8215.jpeg)<br><br>


上図のノードを組み終えたら、下の動画のように、現実のマウスを動かさずにカーソルの表示状態が切り替わっているか確認します。
（「Show Mouse Cursor」をオフにしたときに左上に「Hide MouseCursor」と表示するようにしており、「Hide MouseCursor」と表示された瞬間に少しだけマウスカーソルが動き、カーソルが消えています。）

<iframe width="640" height="360" src="https://www.youtube.com/embed/cIHy73EwA4I" title="cursorvisibility 1 3" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<br><br><br>



以上で今回の記事の内容は終了です。
最後まで読んでいただき、ありがとうございました。