2017-12-08 1 views
1

현재 C#Unity으로 학습하고 있으며 "C"키를 클릭하여 플레이어의 색상을 변경할 수있는 간단한 게임을 만들었습니다. 녹색으로 변경됩니다). 코드는 작동하지만 문제는 동일한 키 ("C")를 사용하여 초록색을 빨간색으로 다시 변경하는 코드를 만드는 방법을 모르겠습니다. 내가 알고있는 유일한 대안은 다른 버튼을 사용하여 if을 새로 만드는 것입니다.키를 누를 때 두 색상 간 전환

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

확인하므로 정확한 녹색으로 색을 변경하는'Update' 방법 ..? 왜 버튼을 만들고 같은 일을하거나 업데이트 메소드를 호출하지 않을까요? 너를 그만 두는게 ..? – MethodMan

+0

죄송합니다. 무슨 뜻인지 잘 모르겠습니다. 당신이 다른 말로 설명 할 수 있겠습니까? – FRP7

답변

6

당신은 빨간색으로 색상을 변경하고 녹색 CHAGE를 눌러 다시 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)) 내 경우 - 다른 구조를 만듭니다 : 다음은 내 코드입니다

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 ()을 두 번 검색하는 것은 비효율적입니다! – 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. 
        } 
      }