碰撞触发器Trigger

触发器的作用就是检测到两个物体碰撞的时候,触发执行脚本中的代码程序。

触发器系统的三个属性:Collider、IsTrigger、Rigibody

  1. Collider:GameObject 提供的基础模型才具有这个属性,表示该物体是否会和别的物体发生碰撞;拥有该属性的物体是一个碰撞器。
  2. Is Trigger:Collider 的子选项,表示该物体是否为一个触发器;只有碰撞器才有该选项,选中 Is Trigger,则该碰撞器成为一个触发器。
  3. Rigibody:刚体组件;当两个物体发生碰撞的时候,至少有一个物体具有 Rigibody 属性才会触发 Trigger() 函数。

触发基本规则

  1. 含有触发判断OnTriggerEnter() 函数的脚本和Rigibody 为同一物体的组件;
  2. 需要判断碰撞的两个物体中“至少”有一个物体的Is Trigger 属性为选中状态;
  3. OnTriggerEnter(Collider col) 中的参数 col 是与该脚本所挂载的物体相碰撞的另一个物体。

碰撞检测函数

  • 进入时:OnCollisionEnter(Collider other) / OnCollisionEnter2D(Collider2D other)

  • 退出时:OnCollisionExit(Collider other) / OnCollisionExit2D(Collider2D other)

  • 逗留时:OnCollisionStay(Collider other) / OnCollisionStay2D(Collider2D other)

触发检测函数

  • 进入时:OnTriggerEnter(Collider other) / OnTriggerEnter2D(Collider2D other)

  • 退出时:OnTriggerExit(Collider other) / OnTriggerExit2D(Collider2D other)

  • 逗留时:OnTriggerStay(Collider other) / OnTriggerStay2D(Collider2D other)

代码举例

  1. 以2D场景举例(3D场景下只需要把函数中 ‘2D’ 去掉即可。
  2. 新建一个脚本,在脚本中加入下面的触发判断函数 OnTriggerEnter2D(Collider2D other) 和 OnTriggerExit2D(Collider2D other),当发生碰撞和结束碰撞时会分别触发相应的函数。
  3. 通过函数中的参数 other 可以访问被碰撞物体的信息。
  4. 在函数中实现需要的功能即可。
private void OnTriggerEnter2D(Collider2D other)
    {
    
    
        Debug.Log("碰撞了!!!" + other.transform.name);
    }

    private void OnTriggerExit2D(Collider2D other)
    {
    
    
        Debug.Log("出去了!!!");
    }

在实际使用过程中,会发现:当物体移动过快时,物体可能会与碰撞体发生穿透现象,这是由于Unity中帧刷新的速率问题,当在前一帧时物体还未与碰撞体发生碰撞,碰撞检测没有触发,而在下一帧中,由于移动速度过快,物体已经离开了碰撞体的检测范围,碰撞检测没有触发。原理大概是这个道理,可以通过调整帧刷新的速率、降低物体移动速度、沿物体移动方向发射射线判断前方是否有碰撞物…

猜你喜欢

转载自blog.csdn.net/qq_33021529/article/details/125682380