按下键时,在两种颜色之间切换

时间:2017-12-08 19:05:56

标签: c# unity3d colors

我正在使用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;

    }
}

4 个答案:

答案 0 :(得分: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;
        }
    }
}

不相关,请使用GetKeyDown代替GetKey,否则在框架中多次更改颜色时会遇到问题,因此无法看到颜色变化。

答案 1 :(得分: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;
            }
        }

答案 2 :(得分: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;
}

答案 3 :(得分: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.
                    }
            }