【问题标题】:Unity cannot change material at runtime by scriptUnity 无法在运行时通过脚本更改材质
【发布时间】:2021-07-02 15:01:46
【问题描述】:

目标

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

在运行时,当用户单击一个简单按钮时,我想用我的新材质“TestMaterial”更改我的游戏对象 > Sprite 渲染器 > 材质属性“默认”。

上下文

我使用通用渲染管道和 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;
}

截图 Unity Editor

【问题讨论】:

    标签: unity3d shader-graph urp


    【解决方案1】:
    1. 确保您可以在编辑器中正确替换它
    2. 我不认为精灵编辑器可以使用材质。使用不同类型的物体来放置材料

    【讨论】:

    • 它在编辑器中运行良好我可以在检查器上替换材质,即使我运行游戏,我的材质与着色器图也可以。但是,如果我在运行时使用我的方法“UpdateToTestMaterial”更改脚本中的材料,它就不再起作用了。
    【解决方案2】:

    好的,我使用带有循环动画的动画师解决了我的问题,我在其中更改了我的材质:

    GameObject Sprite renderer Component

    Animation where I update material

    我仍然不知道为什么我的动画有效而不是我的代码,但它可以完成工作...如果有人找到我的文化的答案,我会很高兴...

    谢谢

    【讨论】:

      猜你喜欢
      • 2018-05-20
      • 2012-09-15
      • 2016-02-24
      • 2018-10-25
      • 2022-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多