unity同一个gameobject上可以同时存在碰撞体和触发器吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity同一个gameobject上可以同时存在碰撞体和触发器吗相关的知识,希望对你有一定的参考价值。

1.要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动。碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。
2.物体发生碰撞的必要条件:
两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。
在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。
3.碰撞器:一群组件,它包含了很多种类,比如:Box Collider(盒碰撞体),Mesh Collider(网格碰撞体)等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。
4.触发器,只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。
参考技术A 可以。OnCollisionEnter碰撞,OnTriggerEnter触发,可以分开处理。但是两个触发器,只会执行同一个方法。

Unity Gameobject Transform

参考技术A

参考
Unity3d 之 理解Gameobject ,gameObject,Transform,transform的区别和关联
GameObject.Find与Transform.Find的区别
【Unity3D游戏开发】GameObject.Find()、Transform.Find查找隐藏对象 (十)

两者返回的类型是不同的:

把这个脚本挂在testfind节点上,指定testName为a或b时,可以找到。而指定为aa或bb时,结果是没找到。此时可以传路径进去,指定为a/aa时,发现又可以找到了。 这就说明了 transform.Find不会递归查找。

在实际开发中可能遇到这样的情况,给定一个节点,在这个子节点中递归的查找符合条件的节点。transform.Find不能递归查找,不能直接使用,GameObject.Find又做了很多无用功,关键若是重名还不一定能满足需求。于是我们可以自己写一个递归程序:

参考 unity3d 提高this.transform的效率

正常来说,大部分同学一般get transform都直接gameobject.transform使用。但往往,你会发现有些人会将transform引用保存起来,例如:

然后使用myTransform替代this.transform。如果你不知道u3d内部实现获取方式你肯定会以为这人脑抽水了,有直接的不用,还自己保存起来。

在Visual Studio中按F12进入定义可以看到,这些属性都是getter。我们的每一次调用,Unity内部会从GameObject里搜寻这些Component,会有一定的损耗。估计大概的效率(没测试,以后有时间再弄,大家可以参考下文章最后的链接):

实际上如果你是偶尔调用一下transform的话,那就不要保留它的引用了,直接this.transform。 如果是Update中,每一帧都要改变的话,还是保留一下this.transform的引用吧。 毕竟倘若一大堆东西的话,能快不少呢。

以上是关于unity同一个gameobject上可以同时存在碰撞体和触发器吗的主要内容,如果未能解决你的问题,请参考以下文章

unity中怎样调用其他脚本变量

Unity Gameobject Transform

图解unity下gameobject和transform的区别和关联

Unity编程标准导引-3.3 Transform

Unity限制脚本不在Editor模式下绑定

Unity3D 将 GameObject 渲染为线框