Unity中碰撞与触发的理解与效果实现
首先要搞明白Unity中C#脚本的六个阶段:
1、初始阶段:比如Awake()唤醒(当物体载入时立即调用一次,常用于游戏开始前进行初始化)和Start()开始(物体载入且脚本启用时被调用一次,常用于数据或游戏逻辑的初始化,执行时机晚于前者);
2、物理阶段:FixedUpdate固定更新,当脚本启用时,固定时间被调用,适用于游戏对象的物理操作例如移动;OnCollisonXXX碰撞,当满足碰撞条件时调用;OnTriggerXXX触发,当满足触发条件时调用;
3、游戏逻辑:Update更新,每帧执行一次;LateUpdate延迟更新,在前者被调用后执行,适用于跟随逻辑;
4、输入事件:OnMouseEnter鼠标移入当前Colider时调用,OnMouseOver鼠标经过当前碰撞器时调用,相同的还有OnMouseExit鼠标离开,OnMouseDown鼠标按下,OnMouseUp鼠标抬起;
5、场景渲染:这里一般用不到;
6、结束阶段:一般也用不到;
理解这六个阶段后就可以知道,一般打开一个C#脚本会默认给出void start()和void Update()这其实就是一般游戏脚本只包含初始阶段和游戏逻辑阶段就够了。但有时需要两个物体相互碰撞或者碰撞后触发一个事件的执行,这时候就要在脚本中加OnCollisonXXX()和OnTriggerXXX()然后在这两个中写上代码。切记不要把他们当方法看待,这两个阶段与start和update同级是不能被调用的,这里新手会有疑问,在这里笔者强调一下。
物理阶段由物理引擎控制,引擎包括刚体(Rigidbody)和碰撞器(Collider)还有触发器。刚体和碰撞器可以给物体添加,直接Add Componet就行。
一、碰撞器
碰撞的条件:1)两者都要具有碰撞组件也就是Collider;2)运动的物体具有刚体组件Rigidbody
碰撞的三阶段:1)当进入碰撞时执行 void OnCollisionEnter(Collison collOther)
2)当碰撞体与刚体触发时每帧执行void OnCollisionStay(Collision collOther)
3)当停止碰撞时执行void OnCollisionExit(Collision collOther)
//当满足碰撞条件,接触的第一帧执行
private void OnCollisionEnter(Collision other)
{
//所挂脚本的这个物体碰到的那个物体的颜色变红
other.GetComponet<MeshRender>().Material.color=Color.red
}
其他的效果读者可以*发挥。
二、触发器
触发器:带有碰撞组件,且Is Trigger属性被勾选的物体,现象就是无碰撞效果。
触发条件:1)两者具有碰撞组件Collider;
2)其中之一带有刚体组件,两者都有也可;
3)其中之一勾选Is Trigger,两者都有也可;
触发三阶段:1)当Collider碰撞体进入触发器时执行 void OnTriggerEnter(Collider collOther)
2) 当碰撞体与触发器接触时每帧执行 void OnTriggerStay(Collider collOther)
3)当停止触发时执行void OnTriggerExit(Collider collOther)
//当满足触发条件,接触的第一帧执行
private void OnTriggerEnter(Collider other)
{
//所挂脚本的这个物体碰到的那个物体碰撞体后那个物体颜色变红
other.GetComponet<MeshRender>().Material.color=Color.red
}
其他的效果读者可以*发挥。
碰撞执行与触发执行最大的不同就是碰撞有刚体,所以会有碰撞弹开的效果,而触发没有弹开的效果,根据每个项目的需求来定吧。还有就是物体的碰撞体Collider可以*变大小和切换形状。
上一篇: 【Qt开发】Qt信号与槽 示例
下一篇: 关于密码加密算法之bcrypt、