我在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语句中的材料。
答案 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事件而改回来。尝试在更改颜色之前添加一个勾选至少延迟
答案 2 :(得分:0)
我知道这已经过时了但是我为了任何一个降落在这里的人而回答。问题是两个if语句。他们都被处决,所以他们互相取消。如果"你需要使用"否则对于第二个,所以只有在第一个不是时才执行。这应该可以实现你想要的,切换材料。
if (renderer.material == Grey) {
renderer.material = Black;
} else if (renderer.material == Black) {
renderer.material = Grey;
}