Unity3d Unity无法通过脚本在运行时更改材质

Unity3d Unity无法通过脚本在运行时更改材质,unity3d,shader-graph,urp,Unity3d,Shader Graph,Urp,目标 我创建了一个材质“TestMaterial”中使用的着色器图形。 我有一个游戏对象,带有一个带有默认材质属性的精灵渲染器组件 在运行时,当用户单击一个简单的按钮时,我想用我的新材质“TestMaterial”更改我的gameObject>精灵渲染器>材质属性“default” 上下文 我使用通用渲染管道和Unity 2019.4.12.f1。 在使用函数“编辑>渲染管道>通用渲染管道>2D渲染器>将项目更新为2D渲染器”之前,我的代码运行良好 我做的测试 我的“TestMaterial”在

目标

我创建了一个材质“TestMaterial”中使用的着色器图形。 我有一个游戏对象,带有一个带有默认材质属性的精灵渲染器组件

在运行时,当用户单击一个简单的按钮时,我想用我的新材质“TestMaterial”更改我的gameObject>精灵渲染器>材质属性“default”

上下文

我使用通用渲染管道和Unity 2019.4.12.f1。 在使用函数“编辑>渲染管道>通用渲染管道>2D渲染器>将项目更新为2D渲染器”之前,我的代码运行良好

我做的测试 我的“TestMaterial”在编辑器中运行良好,当我的游戏对象直接使用此材料时,也可以在运行时运行。 “TestMaterial”只有在我更新脚本中的材质时才起作用,我的游戏对象保留旧的默认材质

代码

[SerializeField] Material testMaterial;
[SerializeField] Material defaultMaterial;

public void UpdateToDefaultMaterial()
{
   this.gameObject.GetComponent<SpriteRenderer>().material = defaultMaterial;
}

public void UpdateToTestMaterial()
{
   this.gameObject.GetComponent<SpriteRenderer>().material = testMaterial;
}
[SerializeField]物料测试物料;
[序列化字段]物料默认物料;
public void UpdateToDefaultMaterial()
{
this.gameObject.GetComponent().material=defaultMaterial;
}
public void UpdateToTestMaterial()
{
this.gameObject.GetComponent().material=testMaterial;
}
屏幕截图

  • 确保可以在编辑器中正确替换它
  • 我认为sprite编辑器不能使用材质。使用不同类型的对象来放置材质

  • 好的,我用一个循环动画解决了我的问题,在循环动画中我改变了我的材质:

    我仍然不知道为什么我的动画工作,而不是我的代码,但它做的工作。。。如果有人能为我的文化找到答案,我会很高兴


    谢谢

    它在编辑器中运行得很好,我可以在inspector上替换材质,即使在我运行游戏时,我的材质也可以使用shader graph。但是,如果我在运行时使用“UpdateToTestMaterial”方法更改脚本中的材质,它将不再工作。