unity3D OnTriggerEnter和OnCollisionEnter的区别
1,测试OnTriggerEnter和OnCollisionEnter的区别
测试:如果两个物体A,B
两者都有碰撞体collider(Box Collider,Sphere Collider,Capsule Collider等)
A,B都有刚体(Rigidbody)
A或者B中有一个勾选isTrigger或者两者都勾选isTrigger A和B都可以进入OnTriggerEnter方法,但是不可进入OnCollisionEnter方法。
A和B都不勾选isTrigger,A和B能进入OnCollisionEnter方法但是不能进入OnTriggerEnter方法。
结论:
OnCollisionEnter方法必须是在两个碰撞物体都不勾选isTrigger的前提下才能进入,反之只要勾选一个isTrigger那么就能进入OnTriggerEnter方法。
OnCollisionEnter和OnTriggerEnter是冲突的不能同时存在的。
2,OnTriggerEnter和OnCollisionEnter的选择。
如果想实现两个刚体物理的实际碰撞效果时候用OnCollisionEnter,Unity引擎会自动处理刚体碰撞的效果。
如果想在两个物体碰撞后自己处理碰撞事件用OnTriggerEnter。
3,一些技巧。
3.1:刚体(Rigidbody)的使用。
两个碰撞的物体A 和 B
现在我们就可以分两种模式来分析了,就是OnTrigger模式和OnCollision模式,因为上面已经详细介绍了两者是对立的模式,
在OnCollision模式下:
测试1:如果只有A有刚体(Rigidbody),那么当A去碰撞B时,发现A弹开B没有动。A和B都进入OnCollisionEnter方法
结论1:只有刚体能实现真实的物理碰撞。
测试2:如果只有A有刚体(Rigidbody),那么当B去碰撞A时,发现没有碰撞效果,A和B都没有进入OnCollisionEnter方法。
结论2:实现碰撞的条件是,发起碰撞方必须具有刚体。
这里我猜测了刚体是用来实现物理真实碰撞的Component,但是这个想法是错误的,因为OnTriggerEnter也必须有一个物体具有刚体,所以猜测刚体应该是一个判断是否实现碰撞的是与否的标志。
在OnTrigger模式下:
A和B必须有一个有刚体(Rigidbody),A和B都可以进入OnTriggerEnter方法。
4,知识扩展。
上面的内容中有的实验是A,B有一个有刚体,有的实验是A,B都有刚体,那么为什么不干脆把两个物体都加刚体就没这么多麻烦了?
其实是这样的,真实游戏里面,有太多的物体,而这些物体如果都有刚体那么对系统的开销是很大的,如果可以减少一半的开销是很不错的选择。
比如地面就可以不设置刚体,因为地面是永远不动的,把人物设置刚体就可以实现真实的物理碰撞效果了。
----
unity3D OnTriggerEnter和OnCollisionEnter的区别的更多相关文章
- [转帖]unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(主要讲区别)
觉得这个讲的挺好的,就转过来了:) 太抽象的理论总是让人眼花缭乱,所以我这里以例证为主. 1,测试OnTriggerEnter和OnCollisionEnter的区别 测试:如果两个物体A,B 两者都 ...
- 【Unity3d游戏开发】unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(转载)
此文为转载,因为最近在做U3D,有一些概念弄得不是很清楚,看到这篇博客讲的不错,就转载过来了,方便自己随时查看. ------------------------------------------- ...
- 【日常记录】【unity3d】 OnTriggerEnter 和 OnCollisionEnter (2D) 的区别
问题:两个物体A,B 两者都有碰撞体 collider(Box Collider,Sphere Collider,Capsule Collider等)当两物体相撞时,会进入 OnTriggerEnte ...
- [Unity2D]Box Collider 2D盒子碰撞器
盒子碰撞器(BoxCollider2D)是Unity2D中常用的碰撞器,所有为碰撞器,顾名思义,就是用于检测物体之间的碰撞情况的,Unity2D里面除了BoxCollider2D碰撞器之外还集成Box ...
- [Unity3D入门]分享一个自制的入门级游戏项目"坦克狙击手"
[Unity3D入门]分享一个自制的入门级游戏项目"坦克狙击手" 我在学Unity3D,TankSniper(坦克狙击手)这个项目是用来练手的.游戏玩法来自这里(http://ww ...
- unity3d API汇总
using UnityEngine; using System.Collections; public class AllFunction : MonoBehaviour { /* API Versi ...
- Unity小知识点大全(一)
原帖地址:https://zhuanlan.zhihu.com/p/54763553 1. 高亮选择 在Scene面板右上角的Gizmo下拉列表中,可以通过设置Selection Outline选项决 ...
- 关于unity碰撞检测器的用法
今天已经是我第三次忘记了这两种碰撞检测的用法,混淆了.特意整理一下 首先把今天要解决涉及到的东西列出来 碰撞方法: public void OnTriggerEnter(Collider other) ...
- Unity随记
//切换场景时怎么能让音乐不停? /////////////////////////////////////////////////////////////////// //切换场景时怎么防止某个物体 ...
随机推荐
- web API的概念
11月20日 纷乱的术语 接口:从接口测试说起,接口是某个对象和外界交互的部分,应用程序可能有很多接口. 用户界面UI(user interface) 消息交互接口,外界是其他程序:diameter, ...
- 【转】Django 图表制作(By Highcharts)
马克,待不时之需 Django 图表制作(By Highcharts):https://blog.csdn.net/Temanm/article/details/54141759 免费而优秀的图表JS ...
- vue中修改了数据但视图无法更新的情况[转载]
我们有时候常碰到vue中明明修改了数据,但是视图无法更新,因此我总结了一点点碰到此类的情况: 1.v-for遍历的数组,当数组内容使用的是arr[0].xx =xx更改数据,vue无法监测到 数组数据 ...
- 机器学习进阶-图像特征sift-SIFT特征点 1.cv2.xfeatures2d.SIFT_create(实例化sift) 2. sift.detect(找出关键点) 3.cv2.drawKeypoints(画出关键点) 4.sift.compute(根据关键点计算sift向量)
1. sift = cv2.xfeatures2d.SIFT_create() 实例化 参数说明:sift为实例化的sift函数 2. kp = sift.detect(gray, None) 找出 ...
- python 之列表推导式,集合推导式,以及字典推导式
https://www.cnblogs.com/weihengblog/p/8428124.html
- ubuntu安装pgAdmin 4
One way to install pgadmin4 is to download its Python wheel at https://www.postgresql.org/ftp/pgadmi ...
- MOBA项目定点数的一个想法
能不能这样: 写逻辑时全用整数,不用每用到一个浮点数就要转一下成浮点数. 主要是除法 题细节较多,待思考
- Zabbix 3.0 LTS安装配置
关于Zabbix监控项类型的官网介绍: https://www.zabbix.com/documentation/3.4/zh/manual/config/items/itemtypes zabbix ...
- RabbitMQ系列教程之四:路由(Routing)(转载)
RabbitMQ系列教程之四:路由(Routing) (使用Net客户端) 在上一个教程中,我们构建了一个简单的日志系统,我们能够向许多消息接受者广播发送日志消息. 在本教程中,我们将为其添加一项功能 ...
- 什么是socket?
1.七层协议简化为四层:应用层.传输层.网络层.链路层:2.套接字是应用层和TCP/IP协议族通信间的软件抽象层,将TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用实现进程在网络中的通信:本地 ...