Unity学习笔记(二)之碰撞检测

初学Unity开发,仅以此做一下学习笔记。。。。


首先,我们得明确一点:即产生碰撞信息所需要的条件。事实上,在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。这两种方式的应用非常广泛。为了完整的了解这两种方式,我们必须理解以下概念:

  1. 碰撞器是一群组件,它包含了很多种类,比如:Box Collider,Capsule Collider等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。
  2. 所谓触发器,只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。
  3. 在Unity3d中,主要有以下接口函数来处理这两种碰撞检测:
  • 触发信息检测:
    1.MonoBehaviour.OnTriggerEnter( Collider other )当进入触发器
    2.MonoBehaviour.OnTriggerExit( Collider other )当退出触发器
    3.MonoBehaviour.OnTriggerStay( Collider other )当逗留触发器
  • 碰撞信息检测:
    1.MonoBehaviour.OnCollisionEnter( Collision collisionInfo ) 当进入碰撞器
    2.MonoBehaviour.OnCollisionExit( Collision collisionInfo ) 当退出碰撞器
    3.MonoBehaviour.OnCollisionStay( Collision collisionInfo ) 当逗留碰撞器
    以上这六个接口都是MonoBehaviour的函数,由于我们新建的脚本都继承这个MonoBehaviour这个类。所以我们的脚本里面可以覆写这六个函数。新建C#脚本
using UnityEngine;
using System.Collections;

public class TestCollider : MonoBehaviour {
    public Transform cube;//将要碰撞到的GameObject的transform
    public float speed = 1.0f;
    public Vector3 dir = Vector3.zero;

    void Start() {
        if(cube){
            dir = cube.position - transform.position;
            dir = dir.normalized;
        }

    }
    void Update() {
        transform.Translate(dir * Time.deltaTime * speed);

    }

    //碰撞
    void OnCollisionEnter(Collision collisionInfo)
    {
        Debug.Log("碰撞_Enter_碰撞到的物体的名字是:" + collisionInfo.gameObject.name);
    }
    void OnCollisionExit(Collision collisionInfo)
    {
        Debug.Log ("碰撞_Exit_碰撞到的物体的名字是:" + collisionInfo.gameObject.name);
    }
    void OnCollisionStay(Collision collisionInfo)
    {
        Debug.Log ("碰撞_Stay_碰撞到的物体的名字是:" + collisionInfo.gameObject.name);
    }

    //触发信息检测
    void OnTriggerEnter(Collider other)
    {
        Debug.Log("触发信息检测_Enter_碰撞到的物体的名字是:" + other.gameObject.name);
    }
    void OnTriggerExit(Collider other)
    {
        Debug.Log("触发信息检测_EXit_碰撞到的物体的名字是:" + other.gameObject.name);
    }
    void OnTriggerStay(Collider other)
    {
        Debug.Log("触发信息检测_Stay_碰撞到的物体的名字是:" + other.gameObject.name);
    }
}

碰撞测试步骤:

  1. 在场景新建地面和两个Cube用以测试


    Unity学习笔记(二)之碰撞检测_第1张图片
    Scane
  2. 给物体附加刚体


    Unity学习笔记(二)之碰撞检测_第2张图片
    Rigidbody
  3. 控制物体移动形成碰撞
    Unity学习笔记(二)之碰撞检测_第3张图片
    Boom

    说明:这里我偷懒使用重力,勾选了Use Gravity
    Unity学习笔记(二)之碰撞检测_第4张图片
    Use Gravity

    补充说明两个都是刚体不会穿透,也就没有Exit的打印,因此还是不要使用重力,自己随时改数据测试吧 - -
    END

你可能感兴趣的:(Unity学习笔记(二)之碰撞检测)