2017-12-08 1 views
1

私は現在C#Unityを学習しており、プレーヤの色を変更することができるシンプルなゲームを作成しました。緑に変わります)。 コードは機能しますが、問題は、同じキー( "C")を使用して緑色を再び赤色に変えるコードを作成する方法がわかりません。 私が知っている唯一の選択肢は、ifを別のボタンで作成することです。ここ は私のコードです:キーを押したときに2つの色を切り替える

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class cubecolor : MonoBehaviour { 


    // Use this for initialization 
    void Start() { 
     gameObject.GetComponent<Renderer>().material.color = Color.red; 

    } 

    // Update is called once per frame 
    void Update() { 
     if (Input.GetKey(KeyCode.C)) 
      gameObject.GetComponent<Renderer>().material.color = Color.green; 

    } 
} 
+0

OKので、緑色正確に色を変化させる 'Update'方法..?ボタンを作成して同じことをしたり、更新メソッドを呼び出すのはなぜですか?あなたがそれをやることを止めるのは何ですか? – MethodMan

+0

申し訳ありませんが、私はあなたがどういう意味をよく理解していません。あなたが気にしないなら、言い換えれば説明できますか? – FRP7

答えて

6

をあなたが赤に色を変更し、緑にチャゲのためにもう一度を押して、Cキーを押します。これは本当に基本的なプログラミングです。

ブール変数を使用して、キーを押すたびに反転または反転する必要があります。フリップは、記号!を使用して行います。ブール変数がtrueの場合は赤、他の場合は緑の色を使用します。 C#ではlogical operatorsdecision makingを読んで理解してください。あなたは実際のゲームを自分で作るためにそれらを必要とします。

Renderer yourRenderer; 
bool red = true; 

// Use this for initialization 
void Start() 
{ 
    yourRenderer = gameObject.GetComponent<Renderer>(); 
    //Use red as default 
    yourRenderer.material.color = Color.red; 
} 

// Update is called once per frame 
void Update() 
{ 
    if (Input.GetKeyDown(KeyCode.C)) 
    { 
     //Flip the boolean variable to the opposite of what it is 
     red = !red; 

     //If true, use red color 
     if (red) 
     { 
      yourRenderer.material.color = Color.red; 
     } 
     //If false, use green color 
     else 
     { 
      yourRenderer.material.color = Color.green; 
     } 
    } 
} 

代わりGetKeyGetKeyDownを使用し、無関係な色の変化を見ることができないため、フレームの色を複数回変更しながら、そうでなければ、問題に実行されます。

+0

それは働いている!巨大なありがとう! – FRP7

+3

あなたは大歓迎です。それは働くかどうかについて覚えていない。それは、私が書いたことを理解することで、将来のコードで問題を解決するためにそれを適用できるようにすることです。ハッピーコーディング! – Programmer

+1

はい、あなたは完全に正しいです!再度、感謝します! – FRP7

1

if (Input.GetKey(KeyCode.C))内のif-else構造を作成します。

void Update() { 
     if (Input.GetKey(KeyCode.C)) 
     { 
      var myObject = gameObject.GetComponent<Renderer>(); 

      Color currentColor = myObject.material.color; 
      if(currentColor == Color.green) 
      { 
       myObject.material.color = Color.Red; 
      } 
      else 
      { 
       myObject.material.color = Color.Green; 
      } 
     } 
1

私はこれをやります。

Private Renderer objectRenderer = gameObject.getComponent<Renderer>(); 
Private Update() { 
    If(Input.GetKeyDown(KeyCode.C)) 
     If(objectRenderer.material.color == Color.green)  
      objectRenderer.material.color = Color.red; 
     else 
      objectRenderer.material.color = Color.green; 
} 
+0

gameObject.getComponent ()を2回取得することは非効率的です! – Odrai

+1

うん、私の悪い、それを固定しました^^ – TheSand

+0

AFAIK、クラス属性を宣言するときにコンポーネントを取得することはできません。 'Awake' /' Start'メソッドでこれを行う必要があります。 – Hellium

1

それは容易bool変数を使用して行われる:

  using System.Collections; 
      using System.Collections.Generic; 
      using UnityEngine; 

      public class cubecolor : MonoBehaviour { 
       private bool isGreen = false; /*Let's create a boolean to store if the cube 
       is green or red*/ 


       // Use this for initialization 
       void Start() { 
        gameObject.GetComponent<Renderer>().material.color = Color.red; 
       } 

       // Update is called once per frame 
       void Update() { 
        if (Input.GetKey(KeyCode.C){ 
         if(isGreen){ //Check if the color is green 
          gameObject.GetComponent<Renderer>().material.color = Color.red; 
         }else{ 
          gameObject.GetComponent<Renderer>().material.color = Color.green; 
         } 
         isGreen = !isGreen; //Switch the boolean. 
        } 
      } 
関連する問題