刚体(Rigidbody)
刚体是激活物理属性的组件,激活后会受到重力影响,
属性
质量Mass:物体的质量
阻力Drag:当受力移动时物体受到的力.0表示没有空气阻力,极大时可使物体停止运动,通常砖头0.001,羽毛设置为10角阻力
Angular Drag:当受扭力旋转时物体受到的空气阻力.0表示没有空气阻力,极大时使物体停止旋转.
使用重力Use Gravity:若激活,则物体受重力影响.
是否是运动学Is Kinematic:若激活,该物体不再受物理引擎控制,而只能通过变换组件来操作,运行时尽量少切换,影响效率
插值Interpolate:用于缓解刚体运动时的抖动(摩擦时可能有抖动)
碰撞器
场景用网格碰撞器,活动的人物用原始碰撞器,网格碰撞器更加消耗性能,如果是人物接触不到的物体连碰撞器都可以不加。
一个物体可以有多个碰撞器,用来代替网格碰撞器,节省性能
Is Trigger
如激活,此碰撞器用于触发事件,并且被物理引擎忽略
Materia 引用何种物理材质决定了它和其他对象如何作用
Convex如激活,该网格碰撞器将会和其他网格碰撞器碰撞。凸起的网格碰撞器限制在255个三角形面内
Mesh网格 用于碰撞所引用的网格
三个石头碰撞(都加了碰撞器)
加了刚体的石头碰撞时,物理引擎会检测,不管其他石头加没加刚体,自身会发生碰撞,不加刚体的石头移动时会穿过去,不发生碰撞。
Is Kinematic启用的石头,自身不会受到碰撞的反作用力,Is Kinematic没启用的石头,碰撞时会被弹飞。
Is Kinematic启用的石头和不是刚体的石头,异同在于虽然都只能通过transform控制变换,但是Is Kinematic启用的石头发生碰撞时会被检测到,而不是刚体的不会被检测到。
碰撞条件
- 两者具有碰撞组件
- 运动的物体具有刚体组件(刚体组件没有运动时处于休眠状态)
碰撞三阶段
属于脚本生命周期中
当进入碰撞时执行(开始时)
void OnCollisionEnter(Collision collOther)
当碰撞体与刚体接触时每帧执行(进行时)
void OnCollisionStay(Collision collOther)
当停止碰撞时执行(分开时)
void OnCollisionExit(Collision collOther)
collOther.collider获取碰撞器
触发器
带有碰撞器组件,且Is Trigger属性被勾选的物体。
现象:无碰撞效果
一个物体可以有多个触发器
触发条件
- 两者具有碰撞组件
- 其中之一带有刚体组件(unity5可以,unity4要运动的物体有刚体)
- 其中之一勾选isTrigger
触发三阶段
当Collider(碰撞体)进入触发器时执行
void OnTriggerEnter(Collider cldOther)
当碰撞体与触发器接触时每帧执行
void OnTriggerStay(Collider cldOther)
当停止触发时执行
void OnTriggerExit(Collider cldOther)
cldOther就是碰撞器
碰撞器可以collOther.contacts[0]获取接触点,collOther.collider获取碰撞器,触发器不行因为返回的是碰撞器本身,无法获取上一级的东西。
物理材质
在Project窗口点击鼠标右键,在弹出的窗口中点击Create> Physi Material。
设置摩擦力,弹力什么的,拖到碰撞器的Material中用。
- bounceCombine
明确弹力如何组合。 - bounciness
面是多么有弹性的?值为0将不会有弹性。值为1将是没有任何能量损耗的弹力。 - dynamicFriction
已经移动时摩擦力被使用。该值在0到1之间(动摩擦力)。 - frictionCombine
明确摩擦力如何结合。 - staticFriction
当对象横卧在表面时,摩擦力系数被使用(静摩擦力)。
射线
当物体运动速度过快时,触发器可能检测不到,物体穿过去了,这时使用射线比较好。
RaycastHit hit;
LayerMask mask;
ray = Camera.main.ScreenPointToRay(Input. mousePosition);//获取主摄像机中鼠标位置
//Raycast(起点坐标,方向,受击物体信息,距离,层);
if(Physics.Raycast(ray,this.transform.forword,out hit,distance,mask)&&Input.GetMouseButtonDown(0))
//鼠标按下
targetPos = hit.point;//记录点击的位置
要先设置距离再设置层,因为层级的值和距离都是整数,不写距离会把层级当做距离。
关节
铰链关节组件属性: