unity学习笔记之物理引擎

刚体(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;//记录点击的位置

要先设置距离再设置层,因为层级的值和距离都是整数,不写距离会把层级当做距离。

关节

铰链关节组件属性:在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值