关于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);
}














网友评论