2017-01-07 4 views
1

ユーザーがクリックしたオブジェクト(再生中のピース)を確認する必要がありますが、問題はif elseブロックがマウスボタンをクリックします。私が 'Input.GetMouseButtonDown(0)'をelse if条件から削除すると、それは機能します。ここに私のコードは次のとおりです。Input.GetMouseButtonDown()はif elseブロックがネストされていないと思われます。

など
void Update() { 
    if (chance == 1) { 
     if (Input.GetKeyUp (KeyCode.Space)) { 
      if (enableInput == true) { 
       enableInput = false; 
       markers [0].gameObject.SetActive (true); 
       markers [1].gameObject.SetActive (false); 
       markers [2].gameObject.SetActive (false); 
       markers [3].gameObject.SetActive (false); 
       a.PlayOneShot (s_Dice); 
       DiceRoll(); 
       if (subPlayer == 4 && diceno == 6) { 
        Vector3 temp; 
        Vector3 currentPos; 
        subPlayer -= 1;//3 
        temp = transform.position; 
        subplayers1 [0].transform.position = new Vector3 (startingpos1.transform.position.x, -1.8f, startingpos1.transform.position.z); 
        Invoke ("waitandgo",0.5f); 
       } else if (Input.GetMouseButtonDown(0) && subPlayer == 3 && diceno == 6) { 
        //print ("clicked"); 
        //ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
        //if (Physics.Raycast (ray, out hit)) { 
        print("Click"); 
       } 
      } 
     } 
    } 
} 
+0

明確にするために、スペースバーが押されていないすべてのフレーム、またはプレーヤーがスペースバーを解放した単一のフレーム( 'Input.GetKeyUp(KeyCode.Space) ')だけを評価しますか?同様に、else if条件が、マウスボタンがクリックされた単一フレームでのみ、またはマウスボタンが押されているフレームごとに真であるようにしますか? – Serlite

+0

@Serliteマウスボタンをクリックしたときに1つのフレームのみが使用される可能性があります(Input.GetMouseButtonUp) –

+0

声明の中に入るためにユーザが想定する入力シーケンスを記述できますか?スペースバーが押されていない状態でマウスをクリックしている間、またはマウスをクリックすると同時にスペースバーを放したときだけ、それは真実でしょうか? – Serlite

答えて

2

Input.GetKeyUp()Input.GetMouseButtonDown()、イベントが発生した場合にのみ、単一のフレームのために忠実。あなたのコードでは、マウスボタンをクリックしている正確なフレーム内のスペースを解放していない場合(ほとんどの場合そうです)、2つの条件が同時に満たされることはなく、else ifケースを入力することはありません。

スペースが解放されたときに、プレーヤーのマウス入力が必要かどうかを判断し、そのポイントからマウスのクリックを聞き始めることができます。この方法では、スペースを解放して同時にマウスをクリックする単一のフレームウィンドウに限定されません。

プレーヤーからのマウスクリックを待っているかどうかを保存するには別の変数が必要です。プレイヤーからの選択が必要な場合はフラグをtrueに設定するだけです。マウスをクリックしてください:

bool awaitingPlayingPieceSelection = false; 

void Update() { 
    if (chance == 1) { 
     if (Input.GetKeyUp (KeyCode.Space)) { 
      if (enableInput == true) { 
       enableInput = false; 
       markers [0].gameObject.SetActive (true); 
       markers [1].gameObject.SetActive (false); 
       markers [2].gameObject.SetActive (false); 
       markers [3].gameObject.SetActive (false); 
       a.PlayOneShot (s_Dice); 
       DiceRoll(); 
       if (subPlayer == 4 && diceno == 6) { 
        // ... 
       } else if (subPlayer == 3 && diceno == 6) { 
        awaitingPlayingPieceSelection = true; 
       } 
      } 
     } 
    } 

    if (awaitingPlayingPieceSelection) { 
     if (Input.GetMouseButtonDown(0)) { 
      // Perform your raycast in here for piece selection 

      // Only set the variable to false once the player has selected a valid piece 
      // If they click something else, keep waiting for input 
      awaitingPlayingPieceSelection = false; 
     } 
    } 
} 

注:私はそれをここに追加しませんでしたが、あなたはそのプレイヤーの入力を受信せずに前方にゲームを動かしていないことを確認するためにチェックするいくつかの条件を行う必要があります。あなたは正しいゲームシーケンスを実行することを確認してください!

ご質問がある場合はお知らせください。

+0

それは働いた...ありがとう非常に多く...私は本当にそれを感謝:) –

+0

助けてうれしい!入力イベントを操作することは時々難しいことがあります。 – Serlite

関連する問題