cocos creator 笔记-材质、资源

版本:3.7.4

一、无动画材质切换

使用两个演示案例

1:喷图

在这个git地址之上进行修改

CocosCreatorShader: 大道至简,殊途同归。CocosCreatorShader意图在于帮助不会Shader的用户能够快速了解如何使用Cocos Effect。CocosCreatorShader intends to help users who do not know Shader quickly understand how to use Cocos Effect. - Gitee.com

注意:对一个模型进行喷图时,由于是对材质进行操作,所以需要场景模型是整个模型。

效果如下:

改动:在Canvas上添加一个按钮,替代原本点击喷图事件,用来喷图,

这里有两种方式进行资源的引用:

1.使用上面git地址的方式@property(Material),将材质直接拖入引用到控制器中

2.在assets目录下新建resources目录,创建材质->引用图片,通过代码的方式动态创建喷图。

在addDecal方法中最后地方改为

        if (dmr) {
            const newMat = new Material();
            this.sprayMat((res) => {
                newMat.copy(res);
                //贴图背景颜色
                // newMat.setProperty('albedo', new Vec4(Math.random(), Math.random(), Math.random(), 1));
                dmr.material = newMat;
            })
        }
    sprayMat(callback) {
        resources.load("spray/" + this.matName, Material, (err, prefab) => {
            return callback(prefab)
        });
    }

2.换皮

这里只能针对无动画模型,添加一个换皮的操作按钮,

同上述引入方式一样,

1:通过将材质和网格直接拖入引用到控制器中,可直接引用

此时为:

           this.node.getComponent(MeshRenderer).material=this.lianyi;
            this.node.getComponent(MeshRenderer).mesh=this.lianyimesh

2:将皮肤模型放到resources目录下,

此时为:

             resources.load("lianyi/DR_182_shd", Material, (err, prefab) => {
              this.node.getComponent(MeshRenderer).material=prefab;
             });

            resources.load("lianyi/mesh", Mesh, (err, prefab) => {
                this.node.getComponent(MeshRenderer).mesh=prefab;
            });

如果模型材质为多个:

上面材质改为:

             let path=["box_model_honglianyi_body_no/BTM_shd","box_model_honglianyi_body_no/PANTS_shd","box_model_honglianyi_body_no/TOP_shd"]
             resources.load(path, Material, (err, prefab) => {
                 no.getComponent(MeshRenderer).materials=prefab;
             });

二、有动画

如果是人物模型动画进行换肤,可能是由于动画绑定的原因,上述方式操作绑定不了网格,

我是在制作模型时,挑选几个衣服版型套入到人物模型上,只保留网格即可,然后绑定骨骼和T动画,再制作动画,然后给衣服制作多种多样的样式。

将人物模型和衣服(这里只需要贴图就可以)做好后导入到cocos中,再在resources目录下给衣服制作材质,(如果选择不制作,将衣服的fbx放到resources也可以的)

在资源中引入模型,隐藏所有的衣服网格。最后只需要在使用的时候显示衣服版型的网格,和选择resources下的材质即可。目前也只能想到这种方式。

装配动作:外部定义了角色动作组manAnim,将动作放在resources目录下,只需要在start方法中执行下面方法即可装配动作,因为load的是AnimationClip,所以path路径是到fbx文件下的动作,所以制作动作资源时命名要规范。

   //根据角色装配动作库
    public static assAnimByRole(node){
        let arr=manAnim
        for(let i=0;i<arr.length;i++){
            let path = "anim/"+role+"/"+arr[i].code+'/'+arr[i].code
            resources.load(path, AnimationClip, (err, prefab) => {
                let clips=node.getComponent(SkeletalAnimation).clips
                clips.push(prefab)
                node.getComponent(SkeletalAnimation).clips=clips
            });
        }
    }

三、模型透视

使用:CocosCreatorShader: 大道至简,殊途同归。CocosCreatorShader意图在于帮助不会Shader的用户能够快速了解如何使用Cocos Effect。CocosCreatorShader intends to help users who do not know Shader quickly understand how to use Cocos Effect.

模型透视:无法正确移植自己项目中:在材质中勾选下图设置,是重要的一步

扩展:原项目需要手动设定透视模型的pass主贴图

        let children = node.children
        for (let i = 0; i < children.length; i++) {
            if (children[i].active && children[i].getComponent(SkinnedMeshRenderer) && this.person_filter_list.indexOf(children[i].name) < 0) {
                resources.load(build_mate_path, Material, (err, res) => {
                    //获取原始mate
                    let orgmate = children[i].getComponent(SkinnedMeshRenderer).materials[0]
                    let pa0t = orgmate.getProperty('mainTexture', 0) as Texture2D
                    if (pa0t) {
                        //指定pass 的主贴图
                        let newMat = new Material();
                        newMat.copy(res);
                        newMat.setProperty('mainTexture', pa0t, 1)
                        //替换mate
                        console.log(children[i].name)
                        children[i].getComponent(SkinnedMeshRenderer).materials = [newMat]
                    }

                });
            }
        }

使用上述方法实现自动设定,node为角色,person_filter_list为需要排除的模型部件,比如,人体的眼睛,睫毛,牙齿等不需要透视的部件模型。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Cocos Creator是一款面向游戏开发者的跨平台游戏开发工具,它集成了Cocos2d-x游戏引擎和Cocos Studio编辑器,支持多种平台上的游戏开发,如iOS、Android、Windows等。 消灭星星是一款基于Cocos Creator开发的游戏。在游戏中,玩家需要消除屏幕上的星星,以获得分数。游戏开始时,屏幕上会随机生成一些星星,玩家可以通过点击相连的星星来消除它们。消除的星星越多,得到的分数就越高。玩家可以通过不断消除星星来刷新高分记录,挑战自己的极限。 在消灭星星游戏中,Cocos Creator提供了丰富的功能和工具,为游戏开发者提供了便利。开发者可以使用Cocos Creator的图形界面编辑器来创建游戏场景、导入资源和设置游戏规则等。同时,Cocos Creator还提供了强大的脚本编写功能,开发者可以使用JavaScript或TypeScript编写游戏逻辑,实现游戏中的各种功能。 除了基本的消除星星玩法,Cocos Creator还支持添加特殊道具、关卡设计、人物角色等功能。开发者可以根据自己的需求,自定义游戏的玩法和功能,使游戏更加有趣和有挑战性。 总而言之,Cocos Creator游戏开发工具提供了强大的功能和便捷的开发环境,使开发者可以轻松地开发出各种各样的游戏,包括消灭星星这样的小而精致的休闲游戏。无论是想要学习游戏开发还是实现自己的游戏创意,Cocos Creator都是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮雪...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值