900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Unity 从零开始的2D游戏开发 —— 碰撞检测 和 用射线实现地面检测

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

时间:2018-10-21 05:18:32

相关推荐

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

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

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

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

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

触发器为:

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

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

void OnCollisionEnter2D(collision collision);void OnCollisionStay2D(collision collision);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是否为空来检测是否碰撞到了物体

if (rayhit.collider != null){return true;}

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。