C# 如何防止每次单击时UI按钮重置为开始条件?Unity3D
下面@Mario提供的布尔问题的答案也解决了主要问题C# 如何防止每次单击时UI按钮重置为开始条件?Unity3D,c#,unity3d,uibutton,reset,renderer,C#,Unity3d,Uibutton,Reset,Renderer,下面@Mario提供的布尔问题的答案也解决了主要问题 原始帖子(行下)中的代码有一个不相关的问题(“==”而不是“=”),但在修复该问题时,我意识到我的字符串名“cubeRend.material”有问题,该字符串名后面包含加法实例,因此在逻辑上似乎不等于“material[0]”的字符串名 然而,我不认为这是重置问题背后的问题,因为我确实在Unity answer论坛上找到了一个关于类似重置问题的问题: 不幸的是,没有人对这个问题做出任何回答,我可以尝试将其应用于本案。我将尝试解决我的等价性
原始帖子(行下)中的代码有一个不相关的问题(“==”而不是“=”),但在修复该问题时,我意识到我的字符串名“cubeRend.material”有问题,该字符串名后面包含加法实例,因此在逻辑上似乎不等于“material[0]”的字符串名 然而,我不认为这是重置问题背后的问题,因为我确实在Unity answer论坛上找到了一个关于类似重置问题的问题: 不幸的是,没有人对这个问题做出任何回答,我可以尝试将其应用于本案。我将尝试解决我的等价性问题,然后用改进的代码进行更新
我试图让一个UI按钮在每次点击时改变立方体上的颜色。这些材料排成一列。在start函数中,我将立方体渲染器的初始条件设置为material[0]。在ChangeCubeColor函数中(在UI按钮的检查器中引用),我使用一个简单的if/else语句检查当前分配给多维数据集的材质。单击按钮后,Unity似乎会将材质重置为原始状态,然后肉眼看不见。请按照if/else说明将颜色设置为阵列中的第二种颜色。其影响是,在您第一次播放时,按钮将改变颜色,但每次之后,颜色都会粘在第二种颜色上 这是我的密码。我为所有的调试语句道歉。我试图弄清楚这个状态是在什么时候改变还是没有改变。我还包括了我的控制台在第一次播放和前3次点击按钮时的屏幕截图。最后,为了清晰起见,删除了调试语句的代码 提前谢谢你的建议
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChangeCubeColor : MonoBehaviour
{
public Material[] material;
Renderer cubeRend;
void Start()
{
cubeRend = GetComponent<Renderer>();
cubeRend.material = material[0];
Debug.Log(cubeRend.material);
}
public void CubeColorChange()
{
if(cubeRend.material = material[0])
{
Debug.Log("cubeRend.material = material[0]");
cubeRend.material = material[1];
Debug.Log("Make 1: "+cubeRend.material);
Debug.Log("cubeRend.material = material[1]");
}
else if (cubeRend.material = material[1])
{
Debug.Log("cubeRend.material = material[1]");
cubeRend.material = material[0];
Debug.Log("Make 0: " + cubeRend.material);
Debug.Log("cubeRend.material = material[0]");
}
}
}
使用系统;
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类ChangeCubeColor:MonoBehavior
{
公共材料[]材料;
立方英尺;
void Start()
{
cubeRend=GetComponent();
cubernd.material=材料[0];
Debug.Log(cubernd.material);
}
公共空间立方体颜色更改()
{
if(cubernd.material=material[0])
{
Debug.Log(“cubernd.material=material[0]”;
立方材料=材料[1];
Debug.Log(“Make 1:+cubeRend.material”);
Debug.Log(“cubernd.material=material[1]”;
}
否则,如果(cubernd.material=material[1])
{
Debug.Log(“cubernd.material=material[1]”;
cubernd.material=材料[0];
Debug.Log(“Make 0:+cubeRend.material”);
Debug.Log(“cubernd.material=material[0]”;
}
}
}
使用系统;
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类ChangeCubeColor:MonoBehavior
{
公共材料[]材料;
立方英尺;
void Start()
{
cubeRend=GetComponent();
cubernd.material=材料[0];
}
公共空间立方体颜色更改()
{
if(cubernd.material=material[0])
{
立方材料=材料[1];
}
否则,如果(cubernd.material=material[1])
{
cubernd.material=材料[0];
}
}
}
试试这种方法。这适用于2种材质如果需要更多,可以使用int索引并更新索引,而不必为每种材质使用if
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChangeCubeColor : MonoBehaviour
{
public Material[] material;
public bool state;
Renderer cubeRend;
void Start()
{
cubeRend = GetComponent<Renderer>();
cubeRend.material = material[0];
//state = false is material 0 //state = true is material 1
state = false;
}
public void CubeColorChange()
{
//Change the state to the other state
state = !state;
cubeRend.material = (state) ? material[1] : material[0];
}
}
使用系统;
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类ChangeCubeColor:MonoBehavior
{
公共材料[]材料;
公共布尔州;
立方英尺;
void Start()
{
cubeRend=GetComponent();
cubernd.material=材料[0];
//state=false表示材料0//state=true表示材料1
状态=假;
}
公共空间立方体颜色更改()
{
//将状态更改为其他状态
状态=!状态;
cubernd.material=(状态)?物料[1]:物料[0];
}
}
编辑1:
以下是更多材料的指数变化
using UnityEngine;
public class ChangeCubeColor : MonoBehaviour
{
public Material[] material;
public int index;
Renderer cubeRend;
void Start()
{
cubeRend = GetComponent<Renderer>();
index = 0;
cubeRend.material = material[index];
}
public void CubeColorChange()
{
//Increase index
index = (material.Length - 1 > index) ? index + 1 : 0;
cubeRend.material = material[index];
}
}
使用UnityEngine;
公共类ChangeCubeColor:MonoBehavior
{
公共材料[]材料;
公共整数指数;
立方英尺;
void Start()
{
cubeRend=GetComponent();
指数=0;
cubernd.material=材料[索引];
}
公共空间立方体颜色更改()
{
//增加指数
指数=(材料长度-1>指数)?指数+1:0;
cubernd.material=材料[索引];
}
}
if语句中需要使用==
进行比较,这让我很惊讶<代码>=是用来分配任务的。啊,是的,我最初有一个“==”,当我试图找出其他错误时,我把它拿了出来。隐马尔可夫模型。。。现在,它根本不进入if/then语句。这就是答案。它不仅解决了布尔问题,而且还解决了主要问题。我更新了我的问题,让人们知道你的答案。
using UnityEngine;
public class ChangeCubeColor : MonoBehaviour
{
public Material[] material;
public int index;
Renderer cubeRend;
void Start()
{
cubeRend = GetComponent<Renderer>();
index = 0;
cubeRend.material = material[index];
}
public void CubeColorChange()
{
//Increase index
index = (material.Length - 1 > index) ? index + 1 : 0;
cubeRend.material = material[index];
}
}