C# 如何防止每次单击时UI按钮重置为开始条件?Unity3D

C# 如何防止每次单击时UI按钮重置为开始条件?Unity3D,c#,unity3d,uibutton,reset,renderer,C#,Unity3d,Uibutton,Reset,Renderer,下面@Mario提供的布尔问题的答案也解决了主要问题 原始帖子(行下)中的代码有一个不相关的问题(“==”而不是“=”),但在修复该问题时,我意识到我的字符串名“cubeRend.material”有问题,该字符串名后面包含加法实例,因此在逻辑上似乎不等于“material[0]”的字符串名 然而,我不认为这是重置问题背后的问题,因为我确实在Unity answer论坛上找到了一个关于类似重置问题的问题: 不幸的是,没有人对这个问题做出任何回答,我可以尝试将其应用于本案。我将尝试解决我的等价性

下面@Mario提供的布尔问题的答案也解决了主要问题


原始帖子(行下)中的代码有一个不相关的问题(“==”而不是“=”),但在修复该问题时,我意识到我的字符串名“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];
    }
}