Unity引擎 ---碰撞体、刚体、碰撞器、触发器详解

一、前言

        本文主要讲述引擎中对象碰撞和触发的理解,有不同意见或见解欢迎私信一起探讨。

二、碰撞体(Collider)

       1.什么是碰撞体?

             用来描述物体形状的网格线(个人理解),以便碰撞的检测。

       上图的正方体的绿线就是碰撞体的线

 2.碰撞体种类

        一般新建物体的时候会自动加上,像复合自定义一般很少用。

3.怎么编辑碰撞体?

        以正方体对象为例,点击Edit Collider即可进行碰撞体编辑。

之后就会出现对象碰撞体的编辑点,每个点都可以进行拖拉,拉长拉短都可以,Shift按住拉可以缩放调整。同理其他碰撞体也一样,球、胶囊等等。

4.碰撞体的属性:

Edit Colloder:手动编辑Collider
Is Trigger:是否为触发器
Material:材质
Center:碰撞器的中心点,相对于物体的自身坐标
Size:碰撞器的大小

二、刚体(Rigidbody)

1.什么是刚体?

      通过碰撞体让物体可以产生物理效果的组件(通俗将就是让物体牛顿化)。

2.刚体属性:

Mass表示物体的质量

Drag表示平移阻力,其数值类型为float,初始值为0,用来表示物体因受阻力而速度衰减的状态。

Angular Drag 旋转阻力,其数值类型为float,初始值为0.05,用于模拟物体因旋转而受到的各方面的影响的现象。

Use Gravity使用重力,表示物体是否受到重力影响,其数据类型是boolean ,初始值为true,该属性设置为false时用来模拟失重现象。

Is Kinematic是否遵循运动学,该属性表示对象是否遵循牛顿运动学物理定理,其数据类型是boolean ,初始值为false。如果该属性设置为true表示该物体运动状态不受外力,碰撞和关节的影响,而只受到动画以及附加在物体上的脚本影响,但是该物体仍然能改变其他物体运动状态,例如游戏中倒下的敌人始终不动 ,就是利用这个属性 。

Interpolate 插值,还属性表示的是该物体运动的插值模式,默认状态下是被禁用的。选择该模式时,在此模式下物理引擎会在物体的运动帧之间进行插值,使得运动更加自然。另外插值导致了物理模拟和渲染的不同步,进而产生物体轻微抖动现象,建议可以对主要角色使用插值,而其他的则禁用此功能,以达到折中的效果。

Freeze Rotation冻结旋转,该属性表示的是该物体的旋转是否受到物理定理的约束。默认状态下任意轴的旋转是受物理定律控制的,该属性的值是修改在每个轴上的旋转属性来实现的。例如在第一人称射击游戏中,通过去除该属性的控制,可以使玩家完全控制视角旋转。

Collision Detection碰撞检测模式,默认状态时Discrete。在没有发生碰撞检测的情况下,碰撞物体会穿过对方,产生所谓 穿透现象。碰撞模式有不连续模式(Discrete),连续模式(Continuous)和动态连续模式(ContinuousDynamic),动态连续模式适用于高速运动的物体,连续模式仅仅可以用于球体,胶囊和盒子碰撞者的刚体,而且会严重影响物体的运动表现,因此大部分采用不连续模式。

 三、物体碰撞

1.物体怎么发生碰撞?

        条件:1.碰撞双方必须都有碰撞体Collider

                   2.碰撞其中一方必须有刚体Rigidbody(一般用在运动的物体上如玩家、子弹)

2.实例1.

双方没加刚体,正方体和球加了碰撞体

实例2.

球加了刚体,正方体和球都加了碰撞体(满足条件)

3.碰撞器

        满足碰撞条件后,可用脚本对俩物体进行操作

碰撞方法有以下几种:

void OnCollisionEnter(Collision collOther){}

刚刚碰到就执行

void OnCollisionStay(Collision collOther){}

物体一直碰到每帧执行

void OnCollisionExit(Collision collOther){}

物体没碰了就执行

4.触发器

        触发条件:1.双方必须有碰撞体Collider

                          2.其中一方有刚体(一般用于运动的一方,玩家和子弹)

                          3.其中一方勾选了Is Trigger

注意:勾选了Is Trigger就没有碰撞效果了,所以要思考勾选对象,一般用于勾选不用做物理效果的,比如子弹打中箱子就勾选箱子

触发方法如下:

当Collider(碰撞体)进入触发器时执行

void OnTriggerEnter(Collider cldOther)

当碰撞体与触发器接触时每帧执行

void OnTriggerStay(Collider cldOther)

当停止触发时执行

void OnTriggerExit (Collider cldOther)

四、总结

        算是回来复习碰撞器和触发器了吧,对于新手来说想让刚入门的看看,别踩坑了(当初研究好久一直触发不了碰撞,没想到作用对象的选择也有要求),所以记录下。

  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值