碰撞器和触发器更新
来源:互联网 发布:玩游戏防闪退软件 编辑:程序博客网 时间:2024/05/15 17:12
在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。这两种方式的应用非常广泛。为了完整的了解这两种方式,我们必须理解以下概念:
(1)碰撞器是一群组件,它包含了很多种类,比如: Box Collider、Capsule Collider等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。
(2)所谓触发器,只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。
(3)在第一部分已经提到,刚体可以计算物体将怎样响应碰撞,因此向实现碰撞检测功能需要给主角添加刚体(Rigidbody)组件,并且取消刚体组件的使用引力(UseGravity)选项。
2、实现碰撞检测的两种方法
触发器:
一个触发器不会碰撞刚体。当一个刚体进入或退出触发器,将发送OnTriggerEnter, OnTriggerExit 和 OnTriggerStay消息。
void OnTriggerEnter(Collider other) { }: 两个GameObject接触
(1)当碰撞器other进入触发器时OnTriggerEnter被调用。
(2)这个消息是发送给触动触发器的碰撞器和刚体(或如果没有刚体的碰撞器)。注意:假如一个碰撞物体同时带有一个刚体属性那么只发送这个触发事件。
void OnTriggerStay(Collider col){ } : 两个GameObject接触并黏住
(1)每个碰撞器从进入触发器那一刻到退出触发器之前,几乎每帧都会调用OnTriggerStay。+(同上) 。注意:OnTriggerStay函数是基于物理计时器,因此它未必每帧都运行
(2)解释注意:OnTriggerStay是在每一个Time.fixedDeltaTime的时间节点上运行,不是Time.deltaTime的时间节点上运行
void OnTriggerExit(Collider col){ } : 两个GameObject分离
(1)当碰撞器离开触发器时,调用OnTriggerExit。+(同上)。
碰撞器:
要查找全部被碰撞的碰撞器详情,你需要迭代接触点(contacts属性)。
Collision.collider: 我们碰撞的碰撞器(只读)。
Collision.rigibody: 我们碰撞的刚体(只读)。如果我们碰撞的物体是一个没有附加刚体的碰撞器,返回null。
void OnCollisionEnter(Collision col){ }: 两个GameObject接触
(1)当collider/rigidbody开始触动另一个rigidbody/collider时OnCollisionEnter被调用。
(2)相比OnTriggerEnter,OnCollisionEnter传递Collision类而不是Collider。Collision类包含接触点,碰撞速度等信息。在这个函数如果你不使用collisionInfo,删去collisionInfo参数以避免不必要的计算。注意,如果碰撞器附加一个非动力学刚体,也仅发送碰撞事件。
void OnCollisionStay(Collision col){ } :两个GameObject接触并黏住
(1) 一个碰撞器或刚体触动另一个刚体或碰撞器,在每帧都会调用OnCollisionStay,直到它们之间离开不接触。+(同上)
void OnCollisionExit( Collision col){ } : 两个GameObject分离
(1)当 collider/rigidbody停止触动另一个 rigidbody/collider时,OnCollisionExit被调用。+(同上)。
接触点:
Collider.contacts: 每一个接触(contact)包含一个接触点、法线和两个碰撞的碰撞器(看ContactPoint)。在OnCollisionStay或OnCollisionEnter里你确保contacts至少有一个元素。
ContactPoint[]:接触点列表
ContactPoint 接触点:描述碰撞发生那里的一个接触点;接触点被储存在Collision碰撞结构。
point 接触点;normal 接触点的法线;thisCollider 第一个接触的碰撞器;otherCollider 接触的其他碰撞器,如下代码:
void OnCollisionEnter(Collision other) {
print("Points colliding: " + other.contacts.Length);
print("First normal of the point that collide: " + other.contacts[0].normal);
}
void OnCollisionEnter(Collision other) {
print("This collider collided with: " + other.contacts[0].otherCollider.name);
}
3、忽略碰撞
Public Transform/GameObject cube忽略对象
void Start(){Physics.IgnorCollision(cube.collider,this.collider );}
- 碰撞器和触发器更新
- 碰撞器和触发器
- Unity3d 碰撞器和触发器
- unity3d 碰撞器和触发器的区别
- 碰撞器和触发器的区别
- 碰撞器与触发器
- 碰撞体(Collider)以及触发器(Is Trigger)----碰撞的条件,触发碰撞器和触发器的条件
- unity3d之刚体碰撞器和触发器的一些知识
- 关于碰撞器和触发器的小笔记
- unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新
- unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新
- unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新
- unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新
- unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新
- Collider(碰撞器与触发器)
- 碰撞器与触发器[Unity]
- Unity 碰撞器与触发器
- 【unity3d】碰撞器与触发器
- Sencha Extjs的官网在线API
- shell浅谈之七文本处理工具grep、sed、awk
- 【转自oschina网站】Hadoop、Pig、Hive、Storm、NOSQL 学习资源收集
- 统计中的各种技巧
- C#序列化与反序列化
- 碰撞器和触发器更新
- Find n‘th number in a number system with only 3 and 4
- buildSessionFactory(ServiceRegistry sr)这个方法来获取SessionFactory
- shell浅谈之字符串和文件处理
- gcc源代码分析,debug_tree()函数的利用
- 自学 iOS 开发的一些经验
- 《TCP/IP详解卷2:实现》笔记--TCP输出
- codeforces 113 B Petr# (一道用了函数就会的题)
- 中国象棋将帅问题