材料变化问题Unity 3D。看不出任何错误

时间:2014-05-30 16:09:21

标签: c# unity3d material

我在C#中使用Unity3D并尝试使用简单的脚本来更改对象的材质。初始材料集有效,但点击它的更改不起作用。 我知道这是基本的,这里已经有很多关于这个主题的问题了,但我见过的所有问题,我都尝试过但没有工作过。 该程序不会丢弃任何错误,材料根本不会改变。我尝试用纹理而不是一个renderer.material.color,只是为了看看我的文件是否有问题。在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.com/7c556ea79bb9b7277ae23d14ee44f8d2

这是一个从黑色开始并点击的gif。 http://gyazo.com/c6e00d858ab8d47436e689dd124bd762

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


进一步更新

我尝试添加第三种材料并尝试if语句的顺序,程序会遍历所有这些,即使不使用这些材料。并且一旦点击的材料总是变成最后一个if语句中的材料。

3 个答案:

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

答案 1 :(得分:0)

我认为您没有正确分配材料颜色,因为您已经创建了材料,但是没有在这些材料上设置任何属性。

请参阅Unity documentation for SetColor

(编辑:务必从右上角选择' C#'

(EDIT2) 根据您更新的问题,我相信它正在改变 - >因为它注册了多个mousedown事件而改回来。尝试在更改颜色之前添加一个勾选至少延迟

请参阅Unity topic that is related

答案 2 :(得分:0)

我知道这已经过时了但是我为了任何一个降落在这里的人而回答。问题是两个if语句。他们都被处决,所以他们互相取消。如果"你需要使用"否则对于第二个,所以只有在第一个不是时才执行。这应该可以实现你想要的,切换材料。

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