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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容

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