美文网首页
cocos creator 3d

cocos creator 3d

作者: 园Flora | 来源:发表于2021-03-16 14:41 被阅读0次

关于creator (题外话:多看源码呀)

它是个开源的软件,源码在对应的resource目录下
源码目录

3D相关的代码目录


代码目录
代码目录2

(由于找3d射线判断碰撞的问题所以看了很久源码,稍后说说发现)

编辑器里的3d

切换3d

节点创建的时候可以直接创建3d节点或者在属性那边点击3d切换。
视角切换3d点击左上方的3d按钮。

碰撞和物理属性

(Physics3DManager:物理系统管理器)
一个3d的物体一般会添加碰撞和物理属性
碰撞:


碰撞
        this._rayTool = cc.director.getPhysics3DManager();//加载场景的时候先打开物理系统
        this._rayTool.enabled = true;
        var collider = this.node.getComponent(cc.BoxCollider3D);//获取碰撞体
        collider.on("collision-enter", (event) => {//碰撞开始的监听
            var otherCollider = event.otherCollider;//对方碰撞体
            var ball = otherCollider.node;//对方node
            if (ball.group == "box") {
                this.node.dispatchEvent(new cc.Event.EventCustom('Collic', true));//主动触发某些事件
                ball.destroy()
            }
        });

分组

碰撞就必须聊到分组了,有些我们希望他能碰撞,有些不想,此时就要设置不同的分组去控制。


组别设置

组别里可以自己设置是否要碰撞。组别的属性会跟着node,我们可以用它来定义自己的分类方便后续逻辑操作。
值得注意的是,分组在摄像机的功能上也有非常大的作用,稍后会提。
物理属性:


物理属性
物理属性可以加重力,某个方向上的加速度等
       var rigidBody = this.node.getComponent(cc.RigidBody3D);
        rigidBody.applyForce(cc.v3(0, add * 10, 0), cc.v3(0, 0, 0));  \\在物体的某个点给了一个力

相机

相机可以通过cullingMask设置这个相机观察的组,ui用2D的相机,3d的相机观察3d的内容,想要设置相机跟随可以把相机放在要跟随物体的子节点即可。


相机的观察

(场景第一个加载的相机默认为Camera.main)

3d世界的点击判断

主要用到了两个知识点
1、首先要打开物理系统管理器,在加载场景的时候,上面有提
2、获取点击位置相对于3d相机的射线
3、对这个射线位置做碰撞检测,这里会传一个组的参数,检测结果会返回和这个组能碰撞的物体,而不是属于这个组的物体

        this._rayTool = cc.director.getPhysics3DManager();
        let touchLoc = touchEvent.getLocation();//获取点击位置
        let ray = this.came.getRay(touchLoc);//(this.came是我的3d相机)获取相机经过点击位置的射线
        const result = this._rayTool.raycastClosest(ray, "default", this._maxDistance);//注意第二个参数的含义
       // const result = this._rayTool.raycast(ray, "default", this._maxDistance);//上一个方法是第一个碰到的物体,这个是返回所有的碰到
        if (result) {
            this.resetAll();
            console.log(result.collider.node)
            const modelCom = result.collider.node.getComponent(cc.MeshRenderer);
            console.log(result.collider, "result.collider")
            modelCom.setMaterial(0, this.rayMaterial);
            modelCom.markForRender(true);
        }

相关文章

网友评论

      本文标题:cocos creator 3d

      本文链接:https://www.haomeiwen.com/subject/ykzkcltx.html