• 您的位置:首页 > 新闻动态 > Unity3D

    unity碰撞检测要点总结

    2018/8/7      点击:

    1.[AddComponentMenu("MyGame/Player")] //在Component菜单中加入“MyGame/Player”选项
    2.Time.deltaTime表示每帧的经过时间,那些需要每帧做增减变动的数值都需要乘上Time.deltaTime
    3.MonoBehaviour的派生类不能使用构造函数初始化
    4.unity的游戏体只能使用Instantiate函数实例化,不能使用new
    5.OnTriggerEnter函数触发条件:首先两个物体都要加碰撞体,被碰撞的物体必须勾选Is Trigger使其监测触发(不要加刚体),负责碰撞的物体必须加上刚体来触发被碰撞物体(加上刚体才拥有了触发别人的作用,不要勾选Is Trigger)。
    或者负责碰撞的物体勾选Is Trigger使其监测触发(不要加刚体),然后被碰撞的物体加上刚体。(不要勾选Is Trigger)
    7.OnCollisionEnter(碰撞瞬间)函数和OnCollisionExit(离开)调用条件:
    1.首先两个物体都要加碰撞体,
    且Is Trigger(因为勾选了它,则碰撞失效)都必须勾掉
    另外:刚体碰非刚体会碰撞(这里碰撞指的是调用碰撞函数),非刚体碰刚体不会碰撞(详细来说就是:运动中的刚体碰非刚体,则会调用被撞物体和撞物体的OnCollisionEnter系列函数)
    OnCollisionStay(接触)函数调用条件:两个满足条件的物体挨着的时候就会调用OnCollisionStay
    8.Is Trigger和Is Kinematic属性详解
    Is Trigger:选中Is Trigger开启触发器(触发器的范围则是碰撞的范围),则碰撞属性失效了
    Is Kinematic:选中Is Kinematic开启运动学状态(一切物体保持静止或保持匀速向前运动,除非有外力影响它的状态,这里的运动学状态指的是匀速向前运动),如选中,该物体不会受到外力,但是需要注意的是碰撞还在(碰撞不属于刚体组件,它是在碰撞体组件里)
    注:

    1.角色控制器(即Character Controller)不发力不受力但是可以被由代码施加的力推动,,如果加Rigidbody组件,则这两个会冲突(这是unity中非自然的一部分)
    2.运动学刚体发力不受力
    3.刚体发力且受力
    4.有时候碰撞可以产生反作用力,比如角色控制器可以通过碰撞给一个运动中的刚体反作用力
    5.刚体静止时,则会进入休眠状态,休眠状态中刚体属性不生效,比如阻力,重力,摩擦力。如何激活刚体使其唤醒:给它力,让它平移等。(这是unity中非自然的一部分)
    6.现实生活中,先有往某个方向的力才会有反方向的阻力,而且一般情况下阻力比该方向的力小,但在unity中,阻力是可以事先设置的,当阻力大于作用力时,物体会向阻力的方向运动,是不是很反自然?(这是unity中非自然的一部分)
    7. 如果两个物体都不是刚体,都有碰撞体,结果穿透,都不会调用碰撞函数
    8.物体1是动力学刚体且有碰撞体,物体2没有刚体有碰撞体,结果穿透,都不会调用碰撞函数
    9.物体1是动力学刚体且有碰撞体,物体2有刚体有碰撞体,结果碰了,调用碰撞函数(不同情况调用不同函数。比如速度不同,调用函数不同[比如速度过快会穿过去])
    10.this.transform.parent = surface.transform;//改变该物体(this.transform)的父级,父物体为surface.transform处的物体