我正在使用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 :(得分:6)
您想按C键将颜色更改为红色,然后再次按下以变为绿色。这是非常基本的编程。
每次按键时,您需要使用布尔变量然后翻转或反转它。通过使用!
符号完成翻转。如果布尔变量为true,则使用红色,否则使用绿色。我鼓励您阅读并理解C#中的logical operators和decision 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))
:
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.
}
}