• Unity3d -- Collider(碰撞器与触发器)


     

    (2d与3d的Collider可以相互存在,但是无法相互协作,如2d是无法检测3d的,反之,一样)

    在目前掌握的情况分析,在Unity中参与碰撞的物体分2大块:1.发起碰撞的物体。2.接收碰撞的物体。

    1. 发起碰撞物体有:Rigodbody , CharacterController .

    2. 接收碰撞物体由:所有的Collider .

    工作的原理为:发生碰撞的物体中必须要有“发起碰撞”的物体。否则,碰撞不响应。

    比如:墙用BoxCollider ,所以墙与墙之间无反应。

    比如:一个带有Rigidbody属性的箱子,能落到带有MeshCollider属性的地面上。

    比如:一个带有Rigidbody属性的箱子,可以被一个带有CharacterController 属性的人推着跑。

    就是此原因。

    在所有Collider上有一个Is Trigger 的boolean型参数。

    当发生碰撞反应的时候,会先检查此属性。

    当激活此选项时,会调用碰撞双方的脚本 OnTrigger***, 反之,脚本方面没有任何反应。

    当激活此选项时,不会发生后续物理的反应。反之,发生后续的物理反应。

    总结:Is Trigger 好比是一个物理功能的开关, 是要“物理功能”还是要“OnTrigger脚本”。

    在Rigodbody 上有一个Use Gravity 的boolean型参数.

    Unity 物理引擎,处理的一个细节:

    当一个CharacterController不发生位置变化,一个Collier发生位置变化后,产生碰撞。将不会调用任何碰撞反映。

    物理引擎视为CharacterController无碰撞.

    碰撞器由来

    1.系统默认会给每个对象(GameObject)添加一个碰撞组件(ColliderComponent),一些背景对象则可以取消该组件。

    2.在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。这两种方式的应用非常广泛。为了完整的了解这两种方式,我们必须理解以下概念:
    (一)碰撞器是一群组件,它包含了很多种类,比如:Box Collider,Capsule Collider等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。
    (二)所谓触发器,只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。
    (三)在Unity3d中,主要有以下接口函数来处理这两种碰撞检测:

    触发信息检测:
    1.MonoBehaviour.OnTriggerEnter(Collider other) / MonoBehaviour.OnTriggerEnter2D(Collider2D other)当进入触发器
    2.MonoBehaviour.OnTriggerExit(Collider other) / MonoBehaviour.OnTriggerExit2D(Collider2D other)当退出触发器
    3.MonoBehaviour.OnTriggerStay(Collider other) / MonoBehaviour.OnTriggerStay2D(Collider2D other)当逗留触发器

    碰撞信息检测:
    1.MonoBehaviour.OnCollisionEnter(Collision collisionInfo)  / MonoBehaviour.OnCollisionEnter2D(Collision2D collisionInfo)当进入碰撞器
    2.MonoBehaviour.OnCollisionExit(Collision collisionInfo)  / MonoBehaviour.OnCollisionExit2D(Collision2D collisionInfo)当退出碰撞器
    3.MonoBehaviour.OnCollisionStay(Collision collisionInfo) / MonoBehaviour.OnCollisionStay2D(Collision2D collisionInfo) 当逗留碰撞器

  • 相关阅读:
    android.os.NetworkOnMainThreadException的解决方案
    一些LinuxC的小知识点(一)
    一些LinuxC的小知识点(二)
    <assert.h>库学习
    <string.h>的学习
    Java异常的中断和恢复
    Java Collection或Map的同步
    Java经典实例:按字符颠倒字符串
    Java 经典实例: Unicode字符和String之间的转换
    Java经典实例:处理单个字符串
  • 原文地址:https://www.cnblogs.com/xingchong/p/11985710.html
Copyright © 2020-2023  润新知