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

碰撞检测是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游戏里面常用的地面检测以及碰撞检测的方法。

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

  1. Unity 从零开始的2D游戏开发 —— 角色移动脚本

    角色移动脚本是一个游戏最基础的脚本,通常也是改动最多的脚本,因此在后期会变得异常臃肿,不过这不是我们讨论的问题,本文主要说明角色移动脚本的设计和一些区别. 1.通过控制角色的Transform来移动角 ...

  2. Unity 从零开始的2D游戏开发 —— [Animator] 使用动画状态机制作简单动画

    动画是一个2D游戏里面必不可少的一部分,使用动画可以实现很多意想不到的功能,除了常规的人物动画,还可以实现一些周期性的运动.接下来会尝试实现一个非帧动画,一个帧动画. 一.非帧动画:通过改变位置或拉伸 ...

  3. Unity 4.x 2D游戏开发基础教程大学霸第一更

    Unity 4.x 2D游戏开发基础教程 大学霸 第1章  Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介 ...

  4. unity超级马里奥2d游戏开发课程-01课程介绍

    大家好,我是小兵,今天给大家带来Unity开发超级马里奥2d游戏的第1课,课程介绍,你可以在我的个人博客geekape.net上找到完整的课程. 我之前主要是做前端开发工作的,并不是做游戏开发的,但由 ...

  5. (转自Unity官方)2D游戏开发套件指南

    2D游戏开发套件指南(上):https://mp.weixin.qq.com/s?__biz=MzUxOTAwNzA0MQ==&mid=2247484383&idx=1&sn= ...

  6. Unity 4.x 2D游戏开发基础教程

    淘宝网店购买地址:http://item.taobao.com/item.htm?spm=686.1000925.1000774.13.0Il2aP&id=39546154468 试读文档下载 ...

  7. unity超级马里奥2d游戏开发-03瓦片地图场景搭建

    大家好,我是小兵,今天给大家带来Untiy开发超级马里奥游戏的第3课,瓦片地图搭建,如果你想查看完整的教程,请访问我的个人博客geekape.net. 前两节课都没涉及具体的游戏制作,算是一个开胃菜, ...

  8. 从零开始的2D游戏开发 —— 像素方块生成器

    洗澡的时候突发奇想,2D游戏里像素是比较简单的绘画风格,但是经常除了人物外,还有一堆乱七八糟的方块比如泥土啊,墙壁啊之类的方块,这些方块如果手画,不仅不具备随机性,而且画起来也很繁琐.因此想到,能不能 ...

  9. Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏

    Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏 即使是现在,很多初学游戏开发的同学,在谈到Unity的时候,依然会认为Unity只能用于制作3D游戏的.实际上,Unity在2013年发布 ...

最新文章

  1. Mysql拐点_InnoDB select性能拐点测试
  2. java线程堆栈_深入JVM剖析Java的线程堆栈
  3. 【JavaScript】在JavaScript中使用JSON进行序列化/反序列化操作
  4. React 测试指南
  5. 成立仅一年的天猫好房,凭什么让55万人排队领钱?
  6. 目标检测(六)--SPPNet
  7. Linux下安装whl文件
  8. CENTOS上编译FreeSwitch
  9. 20141214--C#父类,子类
  10. 1433抓鸡的原理详解以及防范
  11. 【操作系统】代码实践:先来先服务调度算法(FCFS),短进程优先调度算法(SJF),高响应比优先调度算法(HRRN)
  12. c 游戏服务器提前生成一批账号,天涯明月刀第一批天涯合璧 数据互通公告
  13. FMEA软件知识库(FMEAHunter)
  14. 新型智能优化算法——海鸥优化算法(基于Matlab代码实现)
  15. 大芒果单机修改服务器名字,大芒果服务器怎么创建GM账号?
  16. 银行案例分析:识别个人贷款客户画像,实现精准营销与风险防范
  17. Linux系统概述及常用命令
  18. 表格(HTML和CSS属性)
  19. HP 5200n 恢复工厂模式解决IP可ping通但无法打印故障
  20. 人大金仓数据库备份应用sys_dump的使用

热门文章

  1. css3太极图效果+自动旋转
  2. springboot——任务处理
  3. c语言摄影测量共线方程,摄影测量学第讲共线方程的实用形式.ppt
  4. python笛卡尔坐标系_将GPS的WGS84坐标(大地坐标系)转换为平面坐标(笛卡尔坐标系)的方法...
  5. JAVA校园闲置物品交易系统源码+数据库,为在校师生提供闲置物品发布、物品查询、物品交易等功能
  6. 优思学院|什么是精益生产?企业如何实现精益生产?
  7. java三国猛将传关羽_在三国猛将的排名中,关羽竟只是第九?难以置信!
  8. mac Finder FTP 不可以上传和编辑文件
  9. 路由器备份、删除、恢复iOS镜像
  10. 推荐几本提高Java代码规范、可读性、健壮性和可维护性的基本经典图