【零基础入门unity游戏开发——unity2D篇】2D射线和范围检测之Physics2D Raycast、OverlapCircle、OverlapBox
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了
C#篇、unity通用篇、unity3D篇、unity2D篇
。
- 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的同学入门。
- 【unity通用篇】:主要讲解unity的基础通用的知识,包括unity界面、unity脚本、unity资源管理、unity动画、unity摄像机等,适合unity初学者入门。
- 【unity3D篇】:主要讲解unity3D的知识,unity3D角色、unity3D物理系统、unity3D光照等,适合只想做2D游戏的开发者学习。
- 【unity2D篇】unity2D篇:主要讲解unity2D的知识,包括unity2D角色、unity2D物理系统、unity2D光照等,适合只想做3D游戏的开发者学习。
这样方便大家按需选择性的去学习,比如有编程基础的大概率可以直接从unity通用篇开始入门,没有编程基础的建议从C#篇开始学习。只想做2D游戏的话,可以直接从unity2D篇开始学习,3D篇大概率就不需要看了,节约学习时间成本。
参考:【视频】:https://www.bilibili.com/video/BV18E411F7G6/
文章目录
- 前言
- 分析
- 检测地面
-
- 1. 使用Raycast
-
- 1.1 介绍
- 1.3 场景窗口可视化
- 1.4 完整实例代码
- 1.4 存在问题
-
- 1.4.1 问题1
- 1.4.2 问题2
- 2. 使用Overlapcircle
-
- 2.1 介绍
- 2.2 场景窗口可视化
- 2.3 完整实例代码
- 2.4 存在问题
- 3. 使用OverlapBox
-
- 3.1 介绍
- 3.2 场景窗口可视化
- 3.3 完整实例代码
- 3.4 注意事项
- 扩展
- 专栏推荐
- 完结
前言
之前我们已经介绍过3D版射线和范围检测的写过了,参考:
- 【零基础入门unity游戏开发——unity3D篇】3D范围检测之Physics.OverlapBox盒状、Physics.OverlapSphere球形、Physics.OverlapCapsul胶囊
- 【零基础入门unity游戏开发——unity3D篇】3D射线检测之Ray、Physics.Raycast、Physics.RaycastAll、Physics.RaycastNonAlloc的使用
2D版的射线和范围检测和3D版其实极为相似,无非是Physics换成了Physics2D,这里我就不对各个参数进行过多介绍了。直接以实战入手,这里我以角色跳跃为例,实现角色是否在地面判断的3种方法,及优缺点。
分析
通常我们不希望角色可以进行无限次的跳跃
比如如何让角色仅仅一次的跳跃呢?
我们的思路是对这个角色进行一次检测,当角色接触到了平台或者地面时,我们才允许角色跳跃
当角色是在空中时,角色不允许跳跃,直到落地为止
检测地面
我们如何去检测一个物体是否在地面上呢?
1. 使用Raycast
1.1 介绍
我们可以去使用Raycast方法(射线检测),让他发射一条向下的射线,如果这条射线能检测到任何添加了Collider
组件的平台,那就意味着我们的角色接触地面了
Physics2D.Raycast(xxx, xx, xx);
方法第一个参数为射线发射点
第二个参数 为射线的方向
第三个参数为射线的检测距离
检测距离我们不能写成无限长,检测的最大距离,应该是人物的中心点,到我们人物的【底部
】再多出一点点的距离(一点点的距离我用0.1来表示),射线是从我们图片当中的中心点发出的
我们可以通过【sp.bounds.extents.y
】直接获取这个整张图片一半高度
1.3 场景窗口可视化
为了能够在场景窗口种,可视化这条射线,我们可以通过Debug.DrawRay
方法,参数传递的是射线的发射点和射线反向
1.4 完整实例代码
private void CheckGround</