Unity刚体、碰撞器、实验和总结

1.Collider(碰撞器)有很多种,从大体上分2D和3D colider

      3D Collider: Box Collider Sphere Collider  CapsureCollider  Mesh Collier  Terrian Collider  Whell Collider

      2D Collider: Box Collider2D Circle Box Collider 2D  Edge  Collider 2D Polygon Collider 2D

      看上去很多,单作用都是一样的,都是与刚体配合发生碰撞使用的,2D和3D的区别就是 2D是一个面,而3D是体,根据自己游戏中物体的形状选择合适的碰撞盒,能更好的节省CPU的开销;

2.Rigidbody(刚体),作用是让游戏物体具有物体的属性,如重力,摩擦力、弹力等

3.从碰撞盒与刚体结合上分,又可以分为下面3大类:

  1. 静态碰撞器:只有碰撞器没有刚体,只能通过运动学(Transform)让它移动、旋转、缩放,与任何物体发生碰撞,只会产生穿透效果。
  2. 刚体碰撞器:同时添加的碰撞器和刚体的游戏对象,受物理引擎的影响,同时也可以使用运动学去运动
  3. 运动学刚体碰撞器:指添加类刚体和碰撞器的游戏对象,但刚体的Iskinematic 属性勾选为 True。

        这时他是不受力、扭力(相当于旋转)、重力的作用,只能使用运动学,就是控制Transform组件的position、rotation、scale属性,让它动起来,似乎好像没有存在的必要吧??

        请您注意:虽然他不受物理引擎的影响,但他可以进行碰撞检测和触发检测,这在游戏中是很重要的哦,当你的物体不想有碰撞效果,又想有碰撞/触发检测,他就派上用场了。

  1. 还有一个特殊的:角色控制器,用于制作游戏的中第一/三人称角色,同样不受物理影响,比如没有重力,没有阻力,摩擦力,能快速运动立马停下来,沿着墙壁滑动、上下楼梯、斜坡等,但是不同运动刚体的是,他可以通过代码模拟重力,碰撞(需通过OnControllerColliderHit()脚本函数来实现,这有空再讲
    

说了那么多有点晕了了吧,接下来做几个实验验证一下在什么情况,能有碰撞效果,穿透效果,能否进行碰撞检测

      触发检测(没有物理效果),只需勾选IsTrigger

首先在场景中建立2Cube,一个RedCube,一个BlueCube

     Unity刚体、碰撞器、实验和总结_第1张图片

在为其各自添加2个脚本,写入碰撞函数、触发函数,让够手动拖动其中的一个cube,为不让地面对实验产生影响,我在添加刚体的时候去掉重力。

   Unity刚体、碰撞器、实验和总结_第2张图片

   Unity刚体、碰撞器、实验和总结_第3张图片

     

一:移动静态碰撞器  VS 其他

1.静态碰撞器 VS  静态碰撞器>>穿透,不检测

    Unity刚体、碰撞器、实验和总结_第4张图片

2.移动静态碰撞  VS  静止刚体碰撞器>>穿透,不检测

          Unity刚体、碰撞器、实验和总结_第5张图片Unity刚体、碰撞器、实验和总结_第6张图片

        

3.移动的静态碰撞器  VS  静止的运动学刚体碰撞器>>穿透效果,不检测

          Unity刚体、碰撞器、实验和总结_第7张图片

4.移动的静态碰撞器  VS  静止的角色控制器>>穿透效果,不检测

          没有任何碰撞效果。运动学刚体碰撞器是不受到任何外力作用的

      Unity刚体、碰撞器、实验和总结_第8张图片

二:移动刚体 VS 其他

1.移动刚体碰撞器  VS  静态碰撞静止》有碰撞效果,检测

对于移动的刚体碰撞器在遇到静态碰撞器后会产生物理效果,如反弹、无法前进等;对于静止的静态碰撞器,会产生轻微的碰撞效果,如轻微的晃动,但是不会移动

     Unity刚体、碰撞器、实验和总结_第9张图片

2.移动的刚体碰撞器VS静止的刚体碰撞器>>有碰撞效果,检测,

出现正常的物理效果,如反弹

       Unity刚体、碰撞器、实验和总结_第10张图片

3.移动的刚体碰撞器VS静止的运动学刚体碰撞器>>有碰撞效果,检测

运动学刚体碰撞器就像一堵墙一样一动不动

         Unity刚体、碰撞器、实验和总结_第11张图片

4.移动的刚体碰撞器VS静止的角色控制器>>有碰撞效果,检测

  刚体碰撞器遇到角色控制器后会发生反弹,无法继续前进,而角色控制器没有任何效果

        Unity刚体、碰撞器、实验和总结_第12张图片

三:移动的运动学刚体碰撞器 VS 其他

1.移动的运动学刚体碰撞器VS静止的静态碰撞器,穿透,不检测 

         Unity刚体、碰撞器、实验和总结_第13张图片

2.移动的运动学刚体碰撞器VS静止的刚体碰撞器,有碰撞效果,检测(刚体动了)

   仅刚体碰撞器有碰撞效果,如反弹等,运动学刚体碰撞器不受力的作用(不动)

          Unity刚体、碰撞器、实验和总结_第14张图片

3.移动的运动学刚体碰撞器VS静止的运动学刚体碰撞器,穿透,不检测

没有任何反应……就像两个静态碰撞器一样

        Unity刚体、碰撞器、实验和总结_第15张图片

4.移动的运动学刚体碰撞器VS静止的角色控制器(同上)穿透,不检测

        Unity刚体、碰撞器、实验和总结_第16张图片

四:移动的角色控制器   VS 其他

1.移动的角色控制器  VS 静止的静态碰撞器 ,穿透,不检测

        Unity刚体、碰撞器、实验和总结_第17张图片

2.移动的角色控制器  VS 静止的刚体碰撞器,碰撞,检测,

刚体碰撞器被弹开

         Unity刚体、碰撞器、实验和总结_第18张图片

3.移动的角色控制器  VS 静止的运动学刚体碰撞器,穿透,不检测

        Unity刚体、碰撞器、实验和总结_第19张图片

4..移动的角色控制器  VS  静止的角色控制器,穿透,不检测

          Unity刚体、碰撞器、实验和总结_第20张图片

五:补充性:双方都不带碰撞器的,穿透,不检测

        Unity刚体、碰撞器、实验和总结_第21张图片

总结:运动静态碰撞器与任何碰撞器接触,都不碰撞,不检测

          运动的刚体与任何碰撞器接触,碰撞,检测,只是效果不同,与刚体反弹,与其他当刚体被撞翻,其他不动

          运动的运动学刚体,只与刚体发生碰撞,并且刚体被撞翻,与其他,都不碰撞,不检测

          运动的角色控制器 ,与运动学刚体一样

          那为什么:运动的刚体能碰撞?

                  刚体是有个休眠线性速度(Sleep Velocity)和休眠角速度(sleepAngularVelocity),一旦刚体的Velocity和Angular小于他的休眠速度,刚体就会进入休眠状态,一旦休眠了他就不可能碰撞/检测了。

          那什么情况刚体离开休眠状态?

                   1.通过脚本的AddForce/Torque方法,施加了外力,或属性属性变化。实质是刚体由了速度

                   2.被其他刚体碰撞器碰撞(刚体碰撞器,运动学刚体碰撞器,角色控制器),并且只有处于运动状态中才能唤醒休眠中的刚体,静态碰撞器不能唤醒休眠中的刚体

所以:碰撞的必要条件是》》

    碰撞检测的条件及碰撞效果

        1.两方必须要有碰撞器(角色控制器)

        2.运动的一方必须要有刚体

 

等有空将触发实验补上,先将总结说一下

    触发检测的条件

       1.两方必须要有碰撞器

       2.运动的一方必须要有刚体

       3.任意一方IsTrigger设为 True,  双方都可以触发检测

但是必须注意:若与角色碰撞器接触,带刚体的且运动的一方必须勾选IsTrigger,否则,2者不会触发检测

若勾选,都可以触发检测

 

你可能感兴趣的:(#Unity,杂类)