当前位置:   article > 正文

Unity 从零开始的2D游戏开发 —— 碰撞检测 和 用射线实现地面检测_unity2d平面射线和圆形的碰撞方法

unity2d平面射线和圆形的碰撞方法

本文一部分为半年前所写,时间间隔较大,若有逻辑上的错误敬请见谅。

碰撞检测是2D游戏开发里经常要用到的东西,当我们做个游戏demo的时候,碰撞检测基本上无处不在,利用碰撞检测可以实现一些比较基础功能,比如碰撞,跳跃的地面检测,和NPC交互的检测,拾取物品的检测等等。

 


 

碰撞检测必不可少的是碰撞体组件和刚体组件,在2D游戏里面也就是xxcollider2D和Rigicbody2D,同时也可以将碰撞体设置为触发器,来选择是否要计算碰撞的反馈,可以在碰撞体界面勾选is trigger选择为触发器。可以简单的理解为触发器是没有碰撞体积的碰撞体。

碰撞体和触发器使用到的方法不同:

触发器为:

  1. void OnTriggerEnter2D(Collider2D collider); //当触碰到触发器时
  2. void OnTriggerStay2D(Collider2D collider); //当和触发器保持接触时
  3. void OnTriggerExit2D(Collider2D collider); //当和触发器结束碰撞时

3个方法对应不同的碰撞情况,碰撞体也是基本上一样:
 

  1. void OnCollisionEnter2D(collision collision);
  2. void OnCollisionStay2D(collision collision);
  3. void OnCollisionExit2D(collision collision);

这几种方法里传入的参数都是与自身碰撞的碰撞体或者碰撞信息,可以通过查看参数的信息来知道是谁与自己碰撞,在方法里写点判断,就可以实现基本的碰撞检测,地面检测,将碰撞体设置为触发器挂在NPC和物体上,就可以实现基本的交互和拾取。


射线检测可以用来干很多事情,如射击游戏里面模拟子弹,以及接下来要说到的用来地面检测。

地面检测几乎是每个游戏里必不可少的一个运算,有很多方法可以实现地面检测,而射线是其中常用的一种,语法也很简单。

RaycastHit2D rayhit = Physics2D.Raycast(rayStartPosition, Vector2.down, dis, groundLayer);

2D里面的射线是RaycastHit2D来声明,4个参数分别是射线起点,射线方向,射线的距离以及作用的层级

射线起点是一个vector2类型的向量

射线方向是一个vector2类型的向量,可以用vector里面的默认类型vector2.down来输入一个向下的单位向量

射线的距离是一个float类型,用从射线起点到脚下的距离,这个得自己测量一下常量输入

作用的层级是一个Layermask类型,也就是一个32位的int类型,假如地面层是第n层,可以用1<<n来表示。若有另一层m,可以用1<<n+1<<m来表示,这是比较暴力的方法。

知道了基本的语法之后,可以通过判断rayhit.colloder是否为空来检测是否碰撞到了物体

  1. if (rayhit.collider != null)
  2. {
  3. return true;
  4. }

设置好地面对应的层之后,就可以通过collider判断是否碰撞到地面了。

 

这就是2D游戏里面常用的地面检测以及碰撞检测的方法。

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/116838
推荐阅读
相关标签
  

闽ICP备14008679号