# COCOS-方块先生 **Repository Path**: chaoo/cocos-box-run ## Basic Information - **Project Name**: COCOS-方块先生 - **Description**: COCOS CREATOR 3.8 实现的一款简单的3D跑酷游戏。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-12-29 - **Last Updated**: 2025-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 方块先生-基础知识总结 ### 对象与组件 1. 对象由一个节点加多个组件(外观/物理/动画/声音等)构成。 - 选中组件 --【F键】聚焦放大显示。 - 3D坐标系 -- 【位移】【旋转】【缩放】 - 撤销【Ctrl + Z】,重做【Ctrl + Shift + Z】 - MeshRenderer:网格渲染器组件,用于渲染基础的模型网格,网格(Mesh)决定3D模型形状;材质(Material)决定颜色/质感/阴影等;外观=网格+材质。 ### 材质 - 一个模型可以有多个材质,子网格的划分和材质编号的指定工作,一般是由交给美术人员完成的。 - 当一个材质发生改变时,所有已使用这个材质的模型都会发生改变。 ### 光照与阴影 环境光照和光源都会影响物体的颜色,阴影设置可以增强画面的立体感和空间感。 - 环境光设置:选中【场景】->组件【Ambient】->【天空颜色(SkyLightingColor),环境光亮度(SkyIllum),地面反射光颜色(GroundLightingColor)】 - 方向光设置:选中【Light】->组件【DirectionalLight】->【光源颜色(Color),流明度(Illumination)】 - 阴影设置: - ① 选中【场景】->组件【Shadows】->【勾选 Enabled】; - ② 选中【Light】->组件【DirectionalLight】 ->属性【Dynamic Shadow Settings】->【勾选 Shadow Enabled】; - ③ 选中【3D节点】->组件【MeshRenderer】->【勾选 ShadowCastingMode(阴影投射)】【勾选ReceiveShadow(接收阴影,若阴影类型是 ShadowMap就勾选)】; ### 物理能力 完整的物理能力 = 刚体+碰撞体 - 刚体(RigidBody):刚体可以使对象受重力影响。【添加组件】 -> 【Physics】 -> 【RigidBody】; - 碰撞体(***Collider):描述对象的物理形状和表面属性,基础碰撞体包含 盒、球、圆柱、圆锥、胶囊 碰撞体等。盒碰撞体【添加组件】 -> 【Physics】 -> 【BoxCollider】; - 物理材质:【BoxCollider】组件下的【Material】配置物理材质,物理材质对象可以配置摩擦力相关参数。 - 刚体类型:静态刚体(STATIC)、动力学刚体(DYNAMIC)、运动学刚体(KINEMATIC)。 当对象只有碰撞体没有刚体的时候,引擎内部会添加一个默认的静态刚体;静态刚体与其他物体发生碰撞时,不会产生物理行为,因此,也不会移动,例如:建筑物。 运动学刚体可以看做是可以移动的静态刚体,例如:电梯。静态刚体只和动力学刚体刚体产生碰撞。 ### 生命周期回调 生命周期回调函数(按生命周期触发先后排列): - onLoad():初始化阶段,可以获取到场景中的节点,以及节点关联的资源数据。 - onEnable():当组件的enabled属性变为true时,或active属性变为true时,enabled为true的节点首次创建时。 - start():组件第一次激活前,通常用于初始化一些中间状态的数据。 - update():在每一帧渲染前更新物体的行为,状态和方位。 - lateUpdate():动效(如动画、粒子、物理等)更新之后才进行一些额外操作,或所有组件的update都执行完之后才进行其它操作。 - onDisable():当组件的enabled属性变为false时,或active属性变为false时。 - onDestroy():当组件或者所在节点调用了destroy()。 ### 作用力 Vec3:三维向量(x, y, z) applyForce(作用力: Vec3,作用点: Vec3):对刚体施加作用力;作用力(力的方向与大小),作用点(相对于刚体的质心)。 ### 物理事件 - 触发器:碰撞体(***Collider)组件属性IsTrigger设置为true时组件为触发器,触发器只用于碰撞检测和触发事件。 IsTrigger默认false,组件默认为碰撞器,可以结合刚体产生碰撞效果。 - 触发事件:onTriggerEnter(触发开始时),onTriggerStay(触发保持时,会频发触发该事件),onTriggerExit(触发结束时)。 - 碰撞事件:onCollisionEnter(碰撞开始时),onCollisionStay(碰撞保持时,会不断的触发),onCollisionExit(碰撞结束时)。 - 触发事件和碰撞事件区别: - ①触发事件由触发器生成,碰撞事件根据碰撞数据生成。 - ②触发事件可以由触发器和另一个触发器/碰撞器产生。 - ③碰撞事件需要由至少一个动力学刚体的碰撞器和另一个碰撞器产生(两个碰撞器产生)。 ``` start() { let collider = this.node.getComponent(BoxCollider); // 注册触发事件(触发开始时触发) collider.on('onTriggerEnter', this.onTriggerEnter, this); // 注册碰撞事件(碰撞开始时触发) collider.on('onCollisionEnter', this.onCollisionEnter, this); } // 触发事件 onTriggerEnter(event:ITriggerEvent){ // todo 触发开始时的一些逻辑处理 } // 碰撞事件 onCollisionEnter(event:ICollisionEvent){ // todo 碰撞开始时的一些逻辑处理 } onDestroy(): void { // 取消已经注册的事件 let collider = this.node.getComponent(BoxCollider); collider.off('onCollisionEnter', this.onCollisionEnter, this); collider.off('onTriggerEnter', this.onTriggerEnter, this); } ```