当我按下项目中的空格键时,我想要切换两个纹理。但是当我这样做时,什么也没发生。
任何人都可以看到我的逻辑错误吗?我有这个工作在2个着色器之间切换,但不是它是材料,它不起作用。我很困惑。
void Switch()
{
Debug.Log(gameObject.renderer.material.name);
if(Input.GetButtonDown("Jump"))
{
diffuse = false;
//if(gameObject.renderer.material == diffuse_Material)
}
else
{
diffuse = true;
}
if(diffuse == true)
{
gameObject.renderer.material = mask_Material;
print("1");
Debug.Log(gameObject.renderer.material.name);
}
else
{
gameObject.renderer.material = diffuse_Material;
print("2");
Debug.Log(gameObject.renderer.material.name);
}
我的代码会更改一次材料,但是当我再次按空格键时不再更改。
更新
我从更新方法中取出了代码并将其放在自己的代码中。我已经将它修改为“简单”的布尔检查。现在,当我玩游戏时,我的对象从我首先想要的材料开始,但是当我击中空间时,它只将材质改变了几分之一秒。
我怎么能这样做,按下一个按钮,我的布尔可以在真假之间切换。我以为我拥有它,但我想我没有。我的调试日志现在看起来像这样:
DepthMask(实例)
1
DepthMask(实例)
2
漫反射(实例)
差异(实例)
DepthMask(实例)
DepthMask(实例)
1
答案 0 :(得分:0)
我认为问题如下:
当用户按下跳转键时,布尔值设置为true
,材料会发生变化并且一切都很好。然后再次调用update方法,然后我也假设你的Switch方法。
Input.GetButtonDown("Jump")
现在评估为false
,导致您的布尔值扩散再次成为true
,并且材料会更改。
每次用户按下“跳转”按钮时,材料是否应该切换?如果是这样,请将代码更改为(else语句可以完全删除):
void Switch()
{
Debug.Log(gameObject.renderer.material.name);
if(Input.GetButtonDown("Jump"))
{
diffuse = !diffuse;
// material only needs to change if diffuse changed
if(diffuse)
{
gameObject.renderer.material = mask_Material;
print("1");
Debug.Log(gameObject.renderer.material.name);
}
else
{
gameObject.renderer.material = diffuse_Material;
print("2");
Debug.Log(gameObject.renderer.material.name);
}
}
}
编辑:包括整个Switch方法。
答案 1 :(得分:0)
您可以尝试比较
renderer.sharedMaterial
而不是
renderer.material
获取材质的非实例版本。像这样:
public Material a;
public Material b;
void Update ()
{
if (Input.GetButtonDown("Jump"))
{
if (renderer.sharedMaterial == a)
{
gameObject.renderer.material = b;
}
else
{
gameObject.renderer.material = a;
}
}
}