首页 > 其他分享 >Unity-射线

Unity-射线

时间:2023-11-14 19:24:50浏览次数:35  
标签:Unity Raycast 射线 RaycastHit2D 图层 Ground

Unity-射线

前言

​ 在游戏开发的过程中,许多功能的实现都需要物理检测,而 发射射线 是Unity中物理检测的通用方法。例如,我们需要检测玩家(Player)脚下是否是 地面(图层为 Ground),只需要从脚底发射一条射线,检测Player脚下GameObject的图层是否为Ground即可。

​ 射线和物理检测何其重要,因此使用单独一篇笔记进行记录,防止自己忘记。

射线

​ 在Unity2D中,发射一条射线需要用到 Physics2D.Raycast 函数,它将返回一个RaycastHit2D 变量,因此射线写法如下:

	RaycastHit2D (变量名) = Physics2D.Raycast(起始位置, 方向, 距离, 图层);
	if((变量名)) //该变量为bool变量,可用于判断
    {.......}

​ 上述代码的意思是,再 指定位置 朝向 指定方向 创建一个 指定长度 的射线,当射线碰撞到 指定图层 时,返回 true

​ 让我们举一个实际的例子,来看看代码是如何运作的。

	...
	public float footOffset = 0.0f;
	public float wallCheck = 1.0f;
	...
	
    RaycastHit2D leftCheck = Physics2D.Raycast(new Vector2(-footOffset,-0.9f), Vector2.left, wallCheck, Ground);
在上述代码中代码,一开始创建了一个 RaycastHit2D 类型的变量,将其命名为 leftCheck。紧接着调用了 **Physics2D.Raycast** 函数,并将各种参数(位置, 方向, 距离, 图层)传入函数中。在上述代码中,他的 起始位置 是一个新建的坐标(-footOffset,-0.9f),方向为向左,长度为一个float变量 wallcheck,检测的图层是 Ground。

​ 这些代码在执行过程中,会从起始位置(-footOffset,-0.9f)向左发射一条长度为wallCheck的射线,当射线碰撞到图层(LayerMask)为Ground 的对象时,就会返回类似于 “我碰撞到Ground图层了!”的信息。一条射线可能会返回多种信息,它会将这些信息打包存入RaycastHit2D的对象实例中并将其返回。这时我们通过访问 RaycastHit2D 对象实例,就可以知道这条射线所获取的所有信息。

​ 当然,Physics2D.Raycast() 还有很多种写法,可以运用于不同的场景,这里时间有限只学了一个。

参考资料

Physics2D-Raycast - Unity 脚本 API (unity3d.com)

RaycastHit2D - Unity 脚本 API (unity3d.com)

标签:Unity,Raycast,射线,RaycastHit2D,图层,Ground
From: https://www.cnblogs.com/MMMMrD/p/17832324.html

相关文章

  • Unity-对象池 & 多对象池
    Unity-对象池&多对象池简介​ 在制作游戏的过程中,人物和boss的设计往往会有释放多个子弹的攻击方式。我们可以用直接创造子弹然后销毁的办法来实现这些技能的效果,但当子弹开始变多,游戏就会不断的消耗我们的内存。为了解决这个问题,开发者们就引入了状态机。普通对象池创建思......
  • Unity-协程
    Unity-协程协程的简单实现​ 一般的程序执行都是线性的,也就是必须一行一行的执行代码。​ 使用Unity提供的协程,就可以类似于开辟另一条线程,调整根据你所写的代码,调整下一行代码执行的时间。项目示例​ 下面的例子是一个U3DDemo中的代码,实现最简单的Enemy追击Player的......
  • Unity3D 如何用unity引擎然后用c#语言搭建自己的服务器
    Unity3D是一款强大的游戏开发引擎,可以用于创建各种类型的游戏。在游戏开发过程中,经常需要与服务器进行通信来实现一些功能,比如保存和加载游戏数据、实现多人游戏等。本文将介绍如何使用Unity引擎和C#语言搭建自己的服务器,并给出技术详解以及代码实现。对惹,这里有一个游戏开发交流......
  • Unity播放Hap格式视频 (大分辨下流畅播放以及帧同步解决方案)
    前言:之前对于项目上播放大分辨率视频(特别是大于4k分辨率的)常常会感觉相当的头疼,最开始使用的是Unity自带的VideoPlayer,发现效果并不理想,更换为AVPro后发现播放是流畅了但不能操作视频快进,只要一快进就会出现卡顿,最后偶然间发现了一款用于播放Hap格式视......
  • Unity MMORPG 背包系统如何设计
    前言MMORPG游戏中背包系统是很重要的一个模块,大部分的背包系统的讲解,都是讲如何设计UI,如何显示这些,其实这些东西并不是背包系统的核心,接下来我们来分析一下背包系统的数据结构如何设计,能让策划和程序很好的工作,以及非常方便的扩展。对惹,这里有一个游戏开发交流小组,希望大家可......
  • Unity Android Studio 设置自启动应用
    前言最近有需求,需把Unity软件发布到android平台后开机启动应用,在网上查了很多资料,现整理如下Unity部分新建项目,平台设置为android tips:需要勾选ExportProject以便于导入AndroidStudio,使用Unity版本为2021.3.32f1AndroidStudio部分 androidstudio......
  • Unity底层是如何处理C#的
    在面试中,我们经常会被问到Unity的底层是如何处理C#,本节给通过一下3个点来给大家详细的分析这个问题:(1) C#的发展历史;(2) Unity为什么用C#;(3) il2cpp解决了什么问题;  C#的发展历史 C#没有出来之前,当时Java凭借Java虚拟机+Java字节码解释执行,让Java代码移植编写......
  • unity LookRotation LookAt 功能详解
    Quaternoin的旋转函数static Quaternion LookRotation(Vector3 forward, Vector3 upwards =Vector3.up); Transform中的旋转函数void LookAt(Transform target, Vector3 worldUp =Vector3.up);void LookAt(Vector3 worldPosition, Vector3 worldUp =V......
  • unity开发——打飞碟小游戏
    unity开发——打飞碟小游戏目录unity开发——打飞碟小游戏项目地址游戏规则及要求规则要求设计模式讲解代码剖析伪代码DiskDiskDataIUserActionIActionManagerCCActionManagerPhysisFlyActionPhysisActionManagerScoreRecorderUserGUI项目地址https://github.com/goodhuahua/un......
  • Unity 计算圆的切点
    ///<summary>///计算过圆外一点的切点,在圆上的切点///</summary>///<paramname="center"></param>///<paramname="radius"></param>///<paramname="point"></param>......