我是AR人
侠客
侠客
  • UID4982
  • 粉丝1
  • 关注0
  • 发帖数19
阅读:59回复:0

Unity3d入门教程系列:物理引擎之碰撞解析

楼主#
更多 发布于:2018-01-02 22:55
Unity3D内置物理引擎,可以模拟物理效果。典型的一个物理效果就是碰撞。本文将会针对最简单的案例讲述Unity3D的碰撞规律。

1 碰撞规律
首先在场景中创建一个Sphere和一个Cube,它们都是默认带有碰撞器的。










如果要让物体受到物理控制,需要给它添加一个刚体组件。这时,物体将会受到重力影响,并且能够与其他物体碰撞。
  • 碰撞器的分类
碰撞器按外形可以分为BoxCollider、SphereCollider、CapsuleCollider、WheelCollider、MeshCollider等。这里我们以Box和Sphere 的Collider作为实例来展开叙述。
  • 刚体
只带有碰撞器而没有刚体的物体,自己是不能响应物体行为的。这类成为静态碰撞器,适合作为墙体、地面和其他不动的物体。当给物体添加了刚体后,物体就可以接受力和力矩,产生接近真实物体的表现。需要注意的是,如果要让两个物体发生碰撞,至少有一个物体要带有刚体组件。


刚体组件中的Mass是质量,Drag和Angular Drag是阻力和角阻力,这些数值都是可以影响碰撞效果的。UseGravity是重力开关,打开就会响应重力,关闭则不响应。IsKinematic是运动学开关,如果启用,物体将不受物理引擎驱动,只能通过Transform来操作。下面的CollisionDetection默认是Discrete(不连续检测)。最下面是Constraints,可以设置限制刚体的运动。

2 碰撞实例
为了检测碰撞和物体开关,需要把下面的collider.cs脚本绑定到Cube上。

  1. using UnityEngine;  
  2. using System.Collections;  
  3.  
  4. public class collider : MonoBehaviour {  
  5.  
  6.    // Use this for initialization  
  7.    void Start () {  
  8.      
  9.    }  
  10.      
  11.    // Update is called once per frame  
  12.    void Update () {  
  13.      
  14.    }  
  15.    //碰撞检测  
  16.    void OnCollisionEnter(Collision colliderInfo)  
  17.    {  
  18.        Debug.Log(colliderInfo.collider.name+"撞过来了!");  
  19.    }  
  20.    void OnCollisionExit(Collision colliderInfo)  
  21.    {  
  22.        Debug.Log(colliderInfo.collider.name + "结束碰撞!");  
  23.    }  
  24.    void OnCollisionStay(Collision colliderInfo)  
  25.    {  
  26.        Debug.Log(colliderInfo.collider.name + "处于碰撞中!");  
  27.    }  
  28.    //物理开关  
  29.    void OnTriggerEnter(Collider collider)  
  30.    {  
  31.        Debug.Log("Trigger: "+collider.name +"进入!");  
  32.    }  
  33.    void OnTriggerExit(Collider collider)  
  34.    {  
  35.        Debug.Log("Trigger: " + collider.name + "离开!");  
  36.    }  
  37.    void OnTriggerStay(Collider collider)  
  38.    {  
  39.        Debug.Log("Trigger: " + collider.name + "触发中!");  
  40.    }  
  41.  
  42. }  

对于已经创建好的Cube和Sphere,它们自身就是带有碰撞器的,我们给这两个物体加上刚体。点击对象的AddComponent,在下拉的菜单搜索中输入Rigidbody,选择并添加即可,刚体参数可以保持默认。


(1)测试碰撞
不勾选Cube的BoxCollider的IsTrigger,运行游戏。用鼠标拖到Sphere去碰撞Cube,可以看到如下信息:


(2)测试物理开关
勾选Cube的BoxCollider的IsTrigger,运行游戏。用鼠标拖到Sphere去碰撞Cube,可以看到如下信息:

欢迎分享

游客

返回顶部