Unity 无法通过脚本在运行时更改 material
Unity cannot change material at runtime by script
目标
我创建了一个我在 material“测试Material”中使用的着色器图。
我有一个带有默认 material 属性.
精灵渲染器组件的游戏对象
在运行时,当用户单击一个简单的按钮时,我想更改我的游戏对象 > Sprite 渲染器 > Material 属性“默认”和我的新 material“测试Material".
上下文
我使用通用渲染管线和 Unity 2019.4.12.f1。
在我使用功能编辑 > 渲染管道 > 通用渲染管道 > 2D 渲染器 > 将项目更新为 2d 渲染器之前,我的代码运行良好。
我做的测试
我的“TestMaterial”在编辑器中运行良好,在我的游戏对象直接使用此 material 时在运行时也运行良好。
“TestMaterial”仅当我在我的脚本中更新 material 时才起作用,我的游戏对象保持旧的默认值 material。
代码
[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
- 确保您可以在编辑器中正确替换它
- 我认为 sprite 编辑器不能使用 materials。使用不同类型的对象将 material 放在
上
好的,我使用带有循环动画的动画师解决了我的问题,我在其中更改了 material :
GameObject Sprite renderer Component
Animation where I update material
我仍然不知道为什么我的动画能工作而不是我的代码,但它可以工作...如果有人找到适合我的文化的答案我会很高兴...
谢谢
目标
我创建了一个我在 material“测试Material”中使用的着色器图。 我有一个带有默认 material 属性.
精灵渲染器组件的游戏对象在运行时,当用户单击一个简单的按钮时,我想更改我的游戏对象 > Sprite 渲染器 > Material 属性“默认”和我的新 material“测试Material".
上下文
我使用通用渲染管线和 Unity 2019.4.12.f1。 在我使用功能编辑 > 渲染管道 > 通用渲染管道 > 2D 渲染器 > 将项目更新为 2d 渲染器之前,我的代码运行良好。
我做的测试 我的“TestMaterial”在编辑器中运行良好,在我的游戏对象直接使用此 material 时在运行时也运行良好。 “TestMaterial”仅当我在我的脚本中更新 material 时才起作用,我的游戏对象保持旧的默认值 material。
代码
[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
- 确保您可以在编辑器中正确替换它
- 我认为 sprite 编辑器不能使用 materials。使用不同类型的对象将 material 放在 上
好的,我使用带有循环动画的动画师解决了我的问题,我在其中更改了 material :
GameObject Sprite renderer Component
Animation where I update material
我仍然不知道为什么我的动画能工作而不是我的代码,但它可以工作...如果有人找到适合我的文化的答案我会很高兴...
谢谢