以下のようにすれば、trueのときはfalseに、falseのときはtrueにすることができます。
C#
1 if (Input.GetKeyUp(KeyCode.I))
2 {
3 m_cursorIsLocked = !m_cursorIsLocked;
4 }
追記:
以下のように、m_cursorIsLocked
を変更した後に、マウスカーソルの状態の変更処理を行うようにしてみてください。
C#
1 if (m_cursorIsLocked)
2 {
3 Cursor.lockState = CursorLockMode.Locked;
4 Cursor.visible = false;
5 }
6 else if (!m_cursorIsLocked)
7 {
8 Cursor.lockState = CursorLockMode.None;
9 Cursor.visible = true;
10 }
11
12 if (Input.GetKeyUp(KeyCode.I))
13 {
14 m_cursorIsLocked = false;
15 }
↓↓↓
C#
1 if (Input.GetKeyUp(KeyCode.I))
2 {
3 m_cursorIsLocked = !m_cursorIsLocked;
4 }
5
6 if (m_cursorIsLocked)
7 {
8 Cursor.lockState = CursorLockMode.Locked;
9 Cursor.visible = false;
10 }
11 else if (!m_cursorIsLocked)
12 {
13 Cursor.lockState = CursorLockMode.None;
14 Cursor.visible = true;
15 }
追記2:
これって、Standard AssetsのFPSControllerのスクリプトだったんですね…。
というわけで、確かめてみたところ、実はInternalLockUpdate()
はUpdate()
だけではなく、FixedUpdate()
でも呼ばれるそうです。
そのため、2回連続でInternalLockUpdate()
を呼ばれて元に戻ってしまったのだと思います。
また、通常はFixedUpdate()
でInputクラスの関数を呼んではいけないので、これはおそらくFPSController自体のバグではないかと思います(違ったらごめんなさい)。
私の場合、以下のように修正したところ、上手く動作しました。
MouseLook.cs
C#
1 public void UpdateCursorLock()
2 {
3 //if the user set "lockCursor" we check & properly lock the cursos
4 if (lockCursor)
5 InternalLockUpdate(true);
6 }
7
8 // 新規の関数(FixedUpdate()のときはこちらを呼ぶ)
9 public void FixedUpdateCursorLock()
10 {
11 //if the user set "lockCursor" we check & properly lock the cursos
12 if (lockCursor)
13 InternalLockUpdate(false);
14 }
15
16 // Update()のときはinUpdate = true、FixedUpdate()のときはinUpdate = false
17 private void InternalLockUpdate(bool inUpdate)
18 {
19 if (inUpdate)
20 {
21 if (Input.GetKeyUp(KeyCode.Escape))
22 {
23 m_cursorIsLocked = false;
24 }
25 else if (Input.GetMouseButtonUp(0))
26 {
27 m_cursorIsLocked = true;
28 }
29
30 if (Input.GetKeyUp(KeyCode.I))
31 {
32 m_cursorIsLocked = !m_cursorIsLocked;
33 }
34 }
35
36 if (m_cursorIsLocked)
37 {
38 Cursor.lockState = CursorLockMode.Locked;
39 Cursor.visible = false;
40 }
41 else if (!m_cursorIsLocked)
42 {
43 Cursor.lockState = CursorLockMode.None;
44 Cursor.visible = true;
45 }
46 }
FirstPersonController.cs
C#
1 private void FixedUpdate()
2 {
3 // …(中略)
4
5 //m_MouseLook.UpdateCursorLock(); // 変更前
6 m_MouseLook.FixedUpdateCursorLock();
7 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/12/06 15:02
2017/12/07 00:56
退会済みユーザー
2017/12/07 01:45
2017/12/08 04:08
退会済みユーザー
2017/12/08 11:15