質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2281閲覧

Unity もう一度キーを押したときにtrueにする方法

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/12/06 12:30

C#

1// 中略 2 3private void InternalLockUpdate() 4 { 5 if (Input.GetKeyUp(KeyCode.Escape)) 6 { 7 m_cursorIsLocked = false; 8 } 9 else if (Input.GetMouseButtonUp(1)) 10 { 11 m_cursorIsLocked = true; 12 } 13 14 15 if (m_cursorIsLocked) 16 { 17 Cursor.lockState = CursorLockMode.Locked; 18 Cursor.visible = false; 19 } 20 else if (!m_cursorIsLocked) 21 { 22 Cursor.lockState = CursorLockMode.None; 23 Cursor.visible = true; 24 } 25 26 if (Input.GetKeyUp(KeyCode.I)) 27 { 28 m_cursorIsLocked = false; 29 }

もう一度Keycode.Iを押したときに、m_cursorIsLocked = true;にしたいのですが、どう書けばいいのかが分かりません。
Iを押したときにインベントリが開いて、もう一度Iを押したら、m_cursorIsLockedがfalseからtrueになり、マウスカーソルが中心に固定されて、インベントリが閉じる処理です。
回答よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下のようにすれば、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 12:43

編集2017/12/08 04:08
fiveHundred

総合スコア9774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/06 15:02

コードの通りに書きました。ですが、上手くいきません。インベントリが出たと同時にマウスが画面上に現れ、インベントリを消したときにマウスも画面から消えて、画面中央に固定されるようにしたいのですが…。
fiveHundred

2017/12/07 00:56

回答に追記しました。
退会済みユーザー

退会済みユーザー

2017/12/07 01:45

変更しました。 Iを押して、マウスカーソルが出る時と出ない時がなぜかあります。インベントリを消すときに、マウスカーソルが消えるときと消えない時が出てしまいます。三日ほどこれで悩んでいるのですが、解決策が思いつきません。
fiveHundred

2017/12/08 04:08

回答に追記しました。
退会済みユーザー

退会済みユーザー

2017/12/08 11:15

出来ました!本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問