材质变化问题Unity 3D。看不到任何错误

问题描述 投票:0回答:3

我在C#中使用Unity3D,正在尝试一个简单的脚本来改变一个对象的材质。我知道这是基本的,而且这里已经有很多关于这个主题的问题,但我看到的所有问题,我都已经尝试过了,但没有工作。程序没有返回任何错误,材料根本没有变化。在if语句上,我尝试了==和=。

请帮我找到我做错了什么,即使是一个小的错别字,我似乎也看不到。

这是我的代码。

using UnityEngine;
using System.Collections;

public class tilechange : MonoBehaviour {

public Material Grey;
public Material Black;

void Start()
{
    renderer.material = Grey;
}


void OnMouseDown () {
    if (renderer.material = Grey)
    {
        renderer.material = Black;
    }
    if (renderer.material = Black)
    {
        renderer.material = Grey;
    }
}
}

任何帮助将被感激:)


更新

我已经添加了很多debug.logs,似乎颜色会改变,然后又变回来。你知道如何才能阻止这种情况发生吗?

这里是一个从灰色开始点击的gif。http:/gyazo.com7c556ea79bb9b7277ae23d14ee44f8d2。

这里是一个从黑色开始点击的gif。http:/gyazo.comc6e00d858ab8d47436e689dd124bd762。

他们都有不同的行为,这似乎可能与问题有关。


进一步更新

我试着添加了第三个材质,并试验了if语句的顺序,程序会运行所有的材质,即使材质没有被使用。

c# unity3d
3个回答
1
投票

你更新的代码使用的是赋值,而不是测试等价性。

if (renderer.material = Grey)
{
    renderer.material = Black;
}
if (renderer.material = Black)
{
    renderer.material = Grey;
}

应该是这样的。

if (renderer.material == Grey)
{
    renderer.material = Black;
}
if (renderer.material == Black)
{
    renderer.material = Grey;
}

0
投票

我认为你没有正确地分配材料的颜色 因为你已经创建了材料 但还没有为这些材料设置任何属性 详见:

请看 SetColor的Unity文档

(编辑:确保从右上方选择 "C#")

(编辑2)根据你更新的问题,我相信它正在改变->改变回来,因为它正在注册多个mousedown事件。试着在变回颜色之前添加一个tick作为最小的延迟。

与团结相关的主题


0
投票

我知道这是老问题了,但为了让大家登陆这里,我还是回答一下。 问题是两个if语句。 它们都会被执行,所以它们会互相抵消。 你需要在第二个语句中使用 "else if",这样只有在第一个语句不被执行时才会被执行。 这应该能达到你想要的目的,切换材料。

if (renderer.material == Grey) {
    renderer.material = Black;
} else if (renderer.material == Black) {
    renderer.material = Grey;
}
© www.soinside.com 2019 - 2024. All rights reserved.