求助!creator3d 怎么通过代码修改模型上材质的属性

比如我创建了一个材质,材质设置为builtin-unlit。builtin-unlit材质上有一个MainColor属性(材质的颜色值),我要通过代码修改这个值怎么才做得到。

目前通过 meshRenderer.material.setProperty(“MainColor”,new Color(255,0,0,255));修改属性值无效。
通过获取材质属性方法
var property = meshRenderer.material.getProperty(“MainColor”);
console.log(“property”); //输出为null。证明材质的 setProperty 和 getProperty 都不能修改和获取到材质的属性值。

通过代码修改材质属性,unity可以轻易做得到
meshRenderer.material.SetFloat(“数值属性名”,属性值);
meshRenderer.material.SetTexture(“纹理属性名”,属性值);
meshRenderer.material.SetBoolean()
meshRenderer.material.SetInteger()

creator3d的设置材质属性只提供了setProperty,但是这个方法没什么用,设置不了属性。
目前还找不到办法用代码动态修改材质的纹理和颜色等属性,官方文档也没有解释

引擎方的同学给个答案啊,该怎么处理

找到原因了。属性面板的名字是大写开头的,但是effect里是小写开头。
meshRenderer.material.setProperty(“mainColor”,new Color(255,0,0,255));
把属性名改小写开头就可以了。

不过获取材质属性值有个大bug。

直接执行这个获取属性方法,返回值一定是null。
var property = meshRenderer.material.getProperty(“属性名”); //无论属性名是什么,返回值一定是null

必须先手动执行一次setProperty 再执行 getProperty 才能获取到值,挺恶心的设定。
meshRenderer.material.setProperty(“mainColor”,new Color(255,0,0,255));//先执行设置属性
var property = meshRenderer.material.getProperty(“mainColor”); //再执行获取属性,有返回结果

但是这样做就拿不到在编辑器里设置材质的属性初始值了!

2赞