zoukankan      html  css  js  c++  java
  • Unity -- 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) 当逗留碰撞器

  • 相关阅读:
    【已解决】allure空白页 报错 Uncaught TypeError: P.a.registerLanguage is not a function,Uncaught ReferenceError: allure is not defined问题解决方法
    【转】SQLServer查询死锁
    opencv-Mask(掩膜)
    opencv-cvtColor图像制式转换
    opencv-saturate_cast防溢出函数
    opencv-convertTo转换数据格式
    opencv-imwrite保存函数
    opencv-imshow显示函数
    opencv-setTo设置值
    我的蓝牙设备
  • 原文地址:https://www.cnblogs.com/mafeng/p/7599954.html
Copyright © 2011-2022 走看看