unity3d研究1-物理碰撞OnCollision和非物理碰撞OnTrigge的区别

物理碰撞OnCollision,发生真实的碰撞效果(互撞被推开),实际是一个碰撞器

条件:两个物体都必须带有碰撞器(Collider),最少一个物体带有Rigidbody刚体。

1.MonoBehaviour.OnCollisionEnter(Collision collision) 当进入碰撞器

2.MonoBehaviour.OnCollisionExit(Collision collision) 当退出碰撞器

3.MonoBehaviour.OnCollisionStay(Collision collision)  当逗留碰撞器

非物理碰撞OnTrigge,无碰撞效果(彼此相互穿过),实际只是一个触发器,用于检测两个物体的接触状态

条件:两个物体都必须带有碰撞器(Collider),最少一个物体带有Rigidbody刚体,至少一个勾选IsTrigger属性

1.MonoBehaviour.OnTriggerEnter(Collider collider)当进入触发器

2.MonoBehaviour.OnTriggerExit(Collider collider)当退出触发器

3.MonoBehaviour.OnTriggerStay(Collider collider)当逗留触发器

总结:

当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;

当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。

实例代码:

void OnTriggerEnter(Collider collider)
{
     //进入触发器执行的代码
    print(collider.gameObject.name + ":" + Time.time);

}
void OnCollisionEnter(Collision collision)
{
     //进入碰撞器执行的代码
    print(collision.gameObject.name + ":" + Time.time);

}
时间: 2024-10-11 22:37:10

unity3d研究1-物理碰撞OnCollision和非物理碰撞OnTrigge的区别的相关文章

unity3d研究1-点击选中物体

方法1:OnMouseDown()只针对脚本挂载的物体有效 首先,要给 物体加上 碰撞器Collider 然后在物体脚本上加入 void OnMouseDown()//只针对脚本挂载的物体有效 { Debug.Log("jiance"); } 方法2:检测从屏幕发出的射线与物体发生碰撞,而这个发生碰撞的物体就是你选中的物体. 首先,要给 物体加上 碰撞器Collider 然后在物体脚本上加入 void MobilePick() { if (Input.touchCount != 1 )

Unity3D研究之asset bundle 格式简析详解

Unity3D 的 asset bundle 的格式并没有公开.但为了做更好的差异更新,我们还是希望了解其打包格式.这样可以制作专门的差异比较合并工具,会比直接做二进制差异比较效果好的多.因为可以把 asset bundle 内的数据拆分为独立单元,只对变更的单元做差异比较即可. 网上能查到的资料并不是官方给出的,最为流行的是一个叫做 disunity 的开源工具.它是用 java 编写的,只有源代码,而没有给出格式说明(而后者比代码重要的多).通过阅读 disunity 的代码,我整理出如下记

Unity3D研究之监听Hierachy、Project等视图结构变化的事件

以前就有人问我怎么监听Hierarchy视图中创建或删除变化的事件,当时因为有别的事情就没研究这块.刚好最近有这一类的需求我就学习学习.网上发现了一个日本人写的文档,实现的原理很有意思,内容不错我就翻译一下.本文参考了一个游戏编程网的资料在此注明下. 请注意一定把这两个监听的脚本放在Editor文件夹下. 先是基类. using System; using System.Collections; using System.Reflection; using UnityEditor; using

碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞

一,原理介绍 这回有点复杂,不过看懂了还是很好理解的.当然,我不敢保证这种算法在任何情况下都会起效果,如果有同学测试时,发现出现错误,请及时联系我. 我们首先来建立一个以圆心为原点的坐标系: 然后要检测碰撞就只有两种情况了. 情况一,矩形全部都在一个象限内,如图: 当然,图中只是举个例子,不一定是只在第二象限,任何一个象限都行,只要是矩形全在该象限. 这种情况比较好解决,首先,我们计算出矩形每个角的坐标,然后用勾股定律依次算出这个角到圆心的距离是否小于或者等于半径.设这个角与圆心横坐标之差为d1

Unity3D研究之Prefab里面的Prefab关联问题

Unity研究院之Prefab和GameObject的正向和逆向查找引用 我发现很多美工兄弟都爱问程序Unity3d为什么总丢材质? 我不排除U3d有BUG的情况下会丢材质?但是其实很多时候是人为操作而引起的. 1.不保存就在上传 这个操作太恐怖了,切记!!在 U3D里面你无论操作了什么,当你要上传svn的时候一定要先保存场景,Ctrl+S 切记切记!!如果不保存就上传很有可能就会丢材质. 2.我的电脑明明没事,怎么你哪里就丢材质? 我发现一个很有意思的现象,每次走到美术电脑前看它的svn工程时

Unity3D研究之多语言用中文做KEY

 做多语言的时候用中文做KEY绝对是有100%的优点,假设用英文表示那么代码里面给文字赋值的地方全都是英文.写的代码多了以后维护起来就没有人能看懂了,或者看起来非常费劲. 对PoolManager不了解的能够看下初探PoolManager插件非常适合新手学习. 说说用中文做KEY的原理:Unity中给文字赋值的地方就两处, 一个是提前预制在UI Prefab上的文字.另一个是写在代码里面的文字.那么在开发阶段我们在Prefab和代码里面直接就写中文,等项目后期通过工具把所有中文的地方所有提取

Unity3D研究之支持中文与本地文件的读取写入(转)

前几天有个朋友问我为什么在IOS平台中可以正常的读写文件可是在Android平台中就无法正常的读写.当时因为在上班所以我没时间来帮他解决,晚上回家后我就拿起安卓手机真机调试很快就定位问题所在,原来是他文件的路径写错了.开发中往往一道很难的问题解开的时候发现原来真的非常的简单,哇咔咔. 刚好在MOMO的书中也有涉及到文件的读取与写入,那么本节我将书中的部分内容搬到博客中为大家讲解一下.废话我就不多说了咱直奔主题,创建Text.cs脚本,直接挂在摄像机中.代码中包括:创建文件.读取文件.删除文件.

unity3d第一个例子--制作一个简单的球体碰撞墙面

思路 当然首先应该先新建立一个地面,有地面才有一切(floor) 再建立一面墙WaLl,一面墙也就是用100个预制的正方体组成 我们不可能让发射的子弹bullet,朝着一个方向射击shoot 所以需要镜头跟着方向键的按下而移动 float h= Input.GetAxis("Horizontal")*Time.deltaTime*speed; float v=Input.GetAxis("Vertical")*Time.deltaTime*speed; transf

聚集索引和非聚集索引的根本区别

聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后.      聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度.建议使用聚集索引的场合为: a.此列包含有限数目的不同值: b.查询的结果返回一个区间的值: c.查询的