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用以测试


    Scane
  2. 给物体附加刚体


    Rigidbody
  3. 控制物体移动形成碰撞
    Boom

    说明:这里我偷懒使用重力,勾选了Use Gravity
    Use Gravity

    补充说明两个都是刚体不会穿透,也就没有Exit的打印,因此还是不要使用重力,自己随时改数据测试吧 - -
    END
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 111. [动画系统]如何将其他类型的动画转换成关键帧动画? 动画->点缓存->关键帧 112. [动画]Unit...
    胤醚貔貅阅读 14,546评论 3 88
  • 要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动。碰撞体是物理组件的...
    困卡阅读 4,858评论 0 1
  • 更新:【面试题含答案】http://bbs.9ria.com/thread-288394-1-1.html 高频问...
    好怕怕阅读 10,409评论 3 52
  • 无论是碰撞检测还是触发检测,他们都基于Collider组件。两个游戏对象发生碰撞时,碰撞器可以产生系统默认的碰撞产...
    S_H_C阅读 8,201评论 0 3
  • 碰撞发生的必要条件,双方物体必须有一个是刚体,且必须都有Collider。 碰撞分为三种碰撞 静态碰撞 只有一个有...
    LeoYangXD阅读 5,503评论 0 1

友情链接更多精彩内容