请问大佬们,我写了一个材质,然后用这个材质做了一个预制体,然后在游戏里生成了五个预制体,我用代码获取了其中某个预制体的 node 节点, 然后通过这个节点获取它上面的材质,当我修改这个材质参数时,我发现所有拥有这个材质的预制体都被修改了同样的参数,请问这个现象的原因是什么?我该怎么做才能让节点上的材质只影响到节点本身?
-
Creator 版本: 3.4
-
目标平台:edge
请问大佬们,我写了一个材质,然后用这个材质做了一个预制体,然后在游戏里生成了五个预制体,我用代码获取了其中某个预制体的 node 节点, 然后通过这个节点获取它上面的材质,当我修改这个材质参数时,我发现所有拥有这个材质的预制体都被修改了同样的参数,请问这个现象的原因是什么?我该怎么做才能让节点上的材质只影响到节点本身?
Creator 版本: 3.4
目标平台:edge
我的问题刚好相反,cocos2.4 , 3个对象用同已材质,发现第2个材质代码改变宏;也不是改变最后一个改变,就全改变了,但是第1,3个材质改是没生效的;
我把其中一个材质删掉,结果还是改第2个材质生效,第一个材质没有用;
总之测试过,和index应该无关;
我想让材质它全部统一改,如何才能改1个材质全部改
(材质有share_ptr吗,和unity一样?提问的说不想要一起改,你就给多个材质吧,还有什么办法)
我看了半天官方的文档,只讲了关于3dmesh的共享材质和材质实例,2d的我是用文档提到的customMaterial获取的材质,2.4我看了下文档它有一个创建共享材质的方法:createwithbuiltin
可能是因为合批的原因,其实这5个预制体都是用的同一个材质,你要么换一个获得材质的接口,getMaterialInstance,会生成一个新材质,就不会影响其他预制体。要么就提前创建好几个不同参数的材质,不同预制体用不同的材质。
小南别摸鱼了 快工作了
我来搜东西,顺便
我没有看文档
不过共享材质和实力,前者是对应合并渲染用的,实例估计也是也是必须是 Material Instance 类似于单例的意思,主要是渲染管线(这个主要”抄“的是Unity,Unity又”抄“的某CG论坛的分享文章,其实这盖帘是很LOW的,合批很不好用的,都是吹的)
这些文档一般都是请个实习生,都是”精神小妹“写的,没什么内涵,也没有参考价值
官方是相当于一点材质间的关系,注意点,坑点都没说
我们程序员需要的是解决问题,不是共享这些概念,这个材质基础到底是什么?是不是ccEffect造成的不能克隆?
2d 的和批机制,只有一个builtin-sprite 建议预先创建好材质,赋值给 customMaterial,需要切换成原始状态时候,可以设置 customMaterial = null
我用372 写了个demo,可以参考下,里面的blink/溶解效果都是临时替换 customMaterial,具体的可以看下Batcher2D的源码
http://catcat.ai/girl/
文章:https://mp.weixin.qq.com/s?__biz=MzkyODU5MDc4OA==&mid=2247484363&idx=1&sn=fb2315eb3a667ce98975ff7a8db2ddc8&chksm=c2173d60f560b4760d4ffb7d9e24b4312059c4df8b3ed866b2b9eb5f5eb539e1aeb86212f31b#rd
下载:https://catcat.ai/girl/GirlKnights.zip
谢谢大佬的代码参考,还搭配了缓动的API使用,我新手都还不知道有这个API,给了我很多新思路,谢谢。
拿到代码了,大佬都流行直接送代码的?github地址要关注才有?想上去点个star都没路径
公众号帮点赞下:D太懒了,这周传下git,我会上传一个多语言的
微信文章帮点赞转发下就好了:D