Unity 2D射线基本使用和画线

2023-11-12

2D射线可以检测到挂载了Collider2D的对象(包括isTrigger)。

2D射线常用的是 Physics2D.Raycast 函数。它的描述为 :

“向场景中的碰撞体投射射线。射线投射 类似于从空间中的某个点朝特定方向发射一条光束。在该过程中,可以检测并报告与光束接触的任何对象。”

如果发出射线的起点,位于一个碰撞器的内部,检测到的第一个碰撞对象将是该对象自己。(如果不希望这种情况发生,应考虑改用 collider2D.Raycast 或者 collider2D.cast 方法。前者的描述是:“将光线投射到从碰撞体位置开始的场景中,从而忽略碰撞体本身。)

在project settings > Physics2DSettings 里有两个选项与射线相关:

  • Queries Start In Collider (是否检测射线起点所在的碰撞体)取消勾选的话,将不检测上述情况中「对象自己的碰撞体」。
    • 备注:这也将带来其他影响:【why】2D射线检测屏幕某一点是否有物体,检测不到碰撞(Queries Start In Colliders的坑)
  • Queries Hit Triggers (是否检测Trigger碰撞器)如果不想与检测Trigger碰撞器的碰撞,可以取消勾选Queries Hit Triggers。

(注意:这样改变的是全局设置。如不想改变全局设置,应在发出射线时,使用参数带有 contactFilter 的版本,用contactFilter 定义射线检测的条件)


为调试提供便利的额外内容

/额外内容/ 定义一条光线:

//参数为:起点坐标,方向向量
Ray2D ray=new Ray2D( transform.position, Vector2.right );

/额外内容/ 在编辑器中绘制

Debug.DrawRay( ray.origin, ray.direction, Color.blue );//起点,方向,颜色(可选)
//线的长度与射线相同,如当前射线方向向量为Vector2.right即长度为1

发出射线,获取射线碰撞信息

用一个RaycastHit2D类型的变量 ,作为射线检测结果的容器。

//起点、方向
RaycastHit2D info = Physics2D.Raycast(startPos, Vector2.right); //无限远

//起点、方向、距离:
RaycastHit2D info = Physics2D.Raycast( startPos, direction, 10f );


//如果已经定义了光线,可以使用光线的信息投射:
RaycastHit2D info = Physics2D.Raycast(ray.origin, ray.direction);


以上是最简单的射线使用。射线函数有很多不同参数的版本,实现不同的需求。比如检测或是不检测哪些Layer(层):关于Raycast()方法的可选参数LayerMask的使用说明


判断射线是否发生碰撞、获取碰撞到的对象 :

继续前面的代码。利用RaycastHit2D类型的对象就可以获得碰撞对象的各种信息。 

if(info.collider!=null)//如果发生了碰撞
{
	GameObject obj = info.collider.gameObject;

	if(obj.CompareTag("Enemy"))//用tag判断碰到了什么对象
		Debug.Log(obj.name);
}

 完整示例:向自身的右侧发射一条射线,检测碰到的第一个对象是不是敌人。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RayTest : MonoBehaviour {

	Ray2D ray;

	void Update () {
		ray=new Ray2D(transform.position,Vector2.right);
		RaycastHit2D info=Physics2D.Raycast(ray.origin,ray.direction);
		//Debug.DrawRay(ray.origin,ray.direction,Color.blue);

		if(info.collider!=null){
			if(info.transform.gameObject.CompareTag("Enemy")){
				Debug.LogWarning("检测到敌人");
			}else{
				Debug.Log("检测到其他对象");
			}
		}else{
			Debug.Log("没有碰撞任何对象");
		}
	}
}

更多

相关内容总结【Unity2D】射线·碰撞投射·方法总结_煮粥侠_99的博客-CSDN博客射线:Physics2D.Raycast( )必须参数:起点、方向可选参数:距离、Z轴深度、过滤条件(检测哪些层、是否检测触发碰撞器等)out 参数:RaycastHit2D[ ] (存放碰撞返回的结果)返回值:int (表示碰撞结果的个数)/ RaycastHit2D(射线碰撞的结果)备注:如果射线从碰撞体内部发出,可以使用collider2d.Raycast( )方法手册链接:Physics2D-Raycast - Unity 脚本 API与碰撞体相关的射线/投射:.https://blog.csdn.net/yjy99yjy999/article/details/124551072?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22124551072%22%2C%22source%22%3A%22yjy99yjy999%22%7D&ctrtid=mmJNB

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity 2D射线基本使用和画线 的相关文章

  • Unity—UGUI

    每日一句 读数 学习 去更远的地方 才能摆脱那些你不屑一顾的圈子 目录 InputFiled输入框 例 用户名和密码 Toggle组件 案例 冷却效果 InputFiled输入框 Text Component 输入文本组件 Text输入内容
  • halfShader 模型切割

    Shader Unlit halfShader Properties Diffuse Diffuse Color 1 1 1 1 MainTex Texture 2D white StartCutoff StartCutoff Range
  • Unity3D之Rigidbody

    目录 常用的Rigidbody属性和方法 rigidbody AddForce rigidbody AddTorque rigidbody velocity rigidbody angularVelocity rigidbody Sleep
  • Unity 资源加载卸载过程

    什么时候才是UnusedAssets 看一个例子 Object obj Resources Load MyPrefab GameObject instance Instantiate obj as GameObject Destroy in
  • Unity WebGL错误集锦

    ips 0 Unity的PlayerSettings的otherSettings或者Publish Settings里面的Enable Exceptions里面选择Full StackTrace 可以在打出的包中的浏览器的webgl打印出错
  • Unity Animator 动画没切换

    恶魔射手 Survival Shooter 项目 有两个动画 一个是静止时的Idle 一个是走路时候的Move 如下图 设置好动画状态机后发现按方向键后还是Idle 没反应 而一直按着方向键后呢又动起来了 最后找到了真相 原来选中了 Has
  • Unity 安卓打包

    Unity打包的方式有很多种 自动打包和手动打包 今天小弟就鼓捣鼓捣unity手动打包 如果想动态打包的话 可以去看其他大佬的帖帖哈 unity打包先配置环境 下载unity的时候可以顺道把unity的安卓包下载下来 如果忘了也没事 可以从
  • unity制作一个可以自由滑动收缩的历史记录功能。

    公司在做一款模拟经营类的卖车游戏 需要一个简单的历史记录功能 放在左上角 记录最近20条的收入 支出记录 超过2秒不动则收起 收起时展示最近的一个消息记录 用到的组件是ScrollView 使用方法可以参考我写过的一篇博客 ScrollVi
  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • 【IMGUI】 各种辅助类 EditorGUIUtility、EditorUtility、GUIUtility、GUILayoutUtility

    EditorGUIUtility class in Editor 继承自 GUIUtility EditorGUI 的各种辅助程序 EditorGUIUtility currentViewWidth 我尝试打印了下这个值和position
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • unity 性能查看工具Profiler

    文章目录 前言 profiler工具介绍 菜单栏 帧视图 模块视图 模块详细信息 通过profiler分析优化游戏性能 最后 前言 每次进行游戏优化的时候都用这个工具查看内存泄漏啊 代码优化啊之类的东西 真的好用 但是之前也就是自己摸索一下
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常见操作梳理之角色选择一

    进入游戏后 我们经常会进入角色选择的界面 通常是左右两个按钮可以更改角色供玩家选择 对于这种界面我们通常使用数据持久化将角色信息存储起来 接下来的笔记中 我将使用自带的数据持久化系统对其进行操作 实现角色的选择页面 后续会更新xml系列的文
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void

随机推荐

  • 超全总结:神经网络加速之量化模型

    作者丨郝泽宇 学校丨西安交通大学人机所硕士生 研究方向丨深度神经网络压缩 鸣谢 XJTU 魏亚东 I C 董豪 量化模型 Quantized Model 是一种模型加速 Model Acceleration 方法的总称 包括二值化网络 Bi
  • Socket错误连接超时的解决方法

    flashfxp 选项 gt 参数选择 gt 链接 gt FTP gt 数据连接模式里面将被动模式改为主动模式
  • Arduino入门笔记(2):Arduino的开发和virtualbreadboard仿真环境

    欢迎加入讨论群 64770604 1 开发环境 1 下载开发环境 Arduino的开发环境从http arduino cc en Main Software官网下载即可 分为windows版本 Mac版本 linux 32 64位 目前已更
  • 怎样更改linux的用户名

    Linux将用户名修改后 还需要修改 组名 家目录 UID 这只会更改用户名 而其他的东西 比如用户组 家目录 UID 等都保持不变 1 修改用户名 usermod l 新用户 旧用户 这只会更改用户名 而其他的东西 比如用户组 家目录 I
  • UML图学习

    前言 UML是一种建模语言 是系统建模的标准 我们之所以建模是因为大规模的系统设计时相当复杂的 当系统比较复杂时就会涉及到以下这几个问题 开发人员如何与用户进行沟通来了解系统的需求 开发人员之间如何沟通以确保各个部门能够无缝地协作 而UML
  • 十大机器学习算法-梯度提升决策树(GBDT)

    简介 梯度提升决策树 GBDT 由于准确率高 训练快速等优点 被广泛应用到分类 回归合排序问题中 该算法是一种additive树模型 每棵树学习之前additive树模型的残差 许多研究者相继提出XGBoost LightGBM等 又进一步
  • 2023年电赛e控制题视觉处理部分

    2023年电赛e控制题视觉处理部分 题目 视觉处理模块 openmv 处理思路 大致的思路是我这边识别黑色胶带矩形四个点位置 计算斜率 然后将一边的长度均分均分 每次x坐标设为1 有ab斜率y k b 计算y大致值 就得到一个大致的坐标 发
  • LeetCode 1188. 设计有限阻塞队列 (生产者和消费者问题)

    实现一个拥有如下方法的线程安全有限阻塞队列 BoundedBlockingQueue int capacity 构造方法初始化队列 其中capacity代表队列长度上限 void enqueue int element 在队首增加一个ele
  • ldirectord 介绍

    一引言 如何在一个计算机网络中用有限的资源部署计算机 以及安装自由软件让计算机象一台服务器那样一起运行 其中第十五章描述如何建立一个高可用 企业级的LVS DR集群 本文说的是ldirectord是如何监视集群节点 真实服务器 的 1 介绍
  • weex studio爬坑之旅之禁止ESLint

    weex studio爬坑之旅之禁止ESLint ESLint据说是个很好的插件 但是对我这种刚学weex的新手 在安装vue和weex ui后是免不了ctrl v的 但是运行后预览界面打不开着实让人头疼 weex studio也发行了许久
  • FPGA方案选型指引

    本文将提供一些有关如何为您的设计选择 FPGA 的指南 和其他项目选型一样 首先 您需要收集项目的所有需求 然后按重要性权衡您的需求 然后找到最适合您当前和未来产品的 FPGA 您的决定不应仅仅基于技术要求 还应基于商业需求 比如 在您的设
  • HCNP路由交换学习指南(第一章)学习笔记

    什么是路由 IP网络最基本的功能就是为处于网络中不同位置的设备之间实现数据互通 为了实现这个功能 网络中的设备需具备将IP报文从员转发到目的地的能力 以路由器为例 当一台路由器收到一个IP报文时 它会在自己的路由表中执行路由查询 寻找匹配该
  • word文档上粘贴源代码

    有时编辑文档时 我们需要将源代码粘贴进去 但是总不是我们想要的样式 这里演示一种结合notepad 将代码粘贴到word的方法 可以保留代码的源格式 粘贴效果如下 与代码编辑时显示一模一样 方法 借助notepad 1 将代码粘贴到note
  • C++学习日志(输出vector<string>内容)

    前言 标准库类型vector 标准库类型vector表示对象的集合 其内所有的对象类型都相同 使用vector必须包含头文件 include
  • 输出错误:TypeError: must be real number, not str

    输出错误 TypeError must be real number not str 在运行以下代码时显示错误 fo open outName w head1 diamond 3 date hour dataInfo n head2 yy
  • 2021年涡阳四中高考成绩查询,振奋人心,全是省重点!高考成绩出来了,涡阳家长快来看看!...

    原标题 振奋人心 全是省重点 高考成绩出来了 涡阳家长快来看看 2020年高考成绩已经揭晓 亳州哪些学校高考成绩优异 小编带你走进四所名校 感受名校风采 分享桃李芬芳 亳州一中 亳州一中历史悠久 人文底蕴深厚 2020年高考 亳州一中继续保
  • SpringBoot 自定义starter的三种方式

    虽然自定义的starter与版本无关 但还是说明一下版本 SpringBoot 版本2 1 4 RELEASE 1 命名问题 由于官方提供的starter 命名格式为spring boot starter xxx 为与官方的starter区
  • 安装MySQL绿色版本,不用装软件、不用装软件、不用装软件

    安装MySQL绿色版本 不用装软件 不用装软件 不用装软件 MySQL也有绿色版本的 不用安装MySQl软件 下载后解压 简单配置和后 就可以直接使用 1 第一步下载免安装版本 官网链接如下 MySQL Download MySQL Com
  • Centos7升级ssh

    1 备份原有文件 mkdir ssh bak cp etc ssh etc ssh bak 2 安装并启动Telnet yum install telnet telnet server xinetd y systemctl start te
  • Unity 2D射线基本使用和画线

    2D射线可以检测到挂载了Collider2D的对象 包括isTrigger 2D射线常用的是 Physics2D Raycast 函数 它的描述为 向场景中的碰撞体投射射线 射线投射 类似于从空间中的某个点朝特定方向发射一条光束 在该过程中