赞
踩
本文一部分为半年前所写,时间间隔较大,若有逻辑上的错误敬请见谅。
碰撞检测必不可少的是碰撞体组件和刚体组件,在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);
地面检测几乎是每个游戏里必不可少的一个运算,有很多方法可以实现地面检测,而射线是其中常用的一种,语法也很简单。
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判断是否碰撞到地面了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。