欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity中碰撞与触发的理解与效果实现

程序员文章站 2024-03-16 18:46:04
...

首先要搞明白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可以*变大小和切换形状。