射线检测碰撞物的原理是

射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 。

Unity3d中的碰撞器和触发器的区别?

碰撞器是触发器的载体,触发器是碰撞器的属性
Is Trigger=false,碰撞器根据物理引擎引发碰撞,产生碰撞的效果
此时调用OnCollisionEnter/Stay/Exit函数
Is Trigger=true,碰撞器被物理引擎所忽略,没有碰撞效果
此时调用OnTriggerEnter/Stay/Exit函数

发生碰撞的必要条件

两个物体都必须带有碰撞器(Collider)
其中至少有一个物体带有刚体(Rigidbody)或者角色控制器(CharacController)
必须是运动的物体带有Rigidbody脚本才能检测到碰撞

物体发生碰撞的过程有几个阶段

1.OnCollisionEnter
2.OnCollisionStay
3.OnCollisionExit

当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?

穿透(碰撞检测失败)
1)增大细小物体的碰撞体(不建议这样做)
(2)使用射线检测,检测他们之间的距离
(3)FixedUpdate频率修改,可以physics time减小(同样不建议)
(4)改变物体的速度(废话)
(5)将检测方式改为连续检测,rigifdbody.collisionDetectionMode =CollisionDetectionMode.Continuous;
或者是动态连续检测(CollisionDetectionMode.ContinuousDynamic)
(6)代码限制,加大计算量 提前计算好下一个位置

Unity3d物理引擎中,有几种施加力的方式(?

rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函数中

CharacterController和Rigdibody的区别

Rigidbody:刚体组件、用于模拟真实的物理效果、可以受到重力和其他力的作用、这个力可以直接施加、也可以来自其他刚体的碰撞
CharacterController:角色控制组件,它自带一个胶囊控制器,能够受到重力的影响。移动时使用自身的Move()、SimpleMove()方法

Rigidbody具有完全真实物理的特性,Unity中物理系统最基本的一个组件,包含了常用的物理特性,而CharacterController可以说是受限的的Rigidbody,具有一定的物理效果但不是完全真实的,是Unity为了使开发者能方便的开发第一人称视角的游戏而封装的一个组件

什么叫做链条关节(?

Hinge Joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。