搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
很楠不爱3
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Linux 复制命令cp
2
ChatGPT的申请之路(2)_chatgpt continue with apple
3
2019年第十届C/C++ A组蓝桥杯省赛真题_2019蓝桥杯
4
区块链基础知识(下):共识机制 附带图解、超详细教学 看不懂你打死我
5
react开发者必备vscode插件【2024最新】_vscode react 插件
6
计算机网络:传输控制协议(Transmission Control Protocol-TCP协议
7
40个flutter入门实例详解(一)_flutter 示例
8
[附源码]java毕业设计酒店疫情防控系统_基于java的抗疫酒店管理系统毕业设计
9
shell—for循环_shell for循环
10
vm虚拟机vnc服务器 修改端口,如何在 vmware esxi 中开放 VNC功能及端口实现远程管理 完整篇(示例代码)...
当前位置:
article
> 正文
对Physics.Raycast和Ray(射线)的理解 和 分层layer的使用_physics.raycast 排除layer
作者:很楠不爱3 | 2024-04-08 18:42:02
赞
踩
physics.raycast 排除layer
http://www.narkii.com/club/thread-358232-1.html
在游戏中,我们常常要用到鼠标来控制物体的移动或是鼠标拾取某个物体。还有射击游戏里,子弹打中靶子......这些都需要Physics.Raycast和ray。可见他们的重要性。
首先说说射线;
射线是3D世界中一个点向一个方向发射的一条无终点的线。在发射的轨迹中,一旦与其他物体发生碰撞,它就会停止。
在API文档中Ray是一个结构体【Struct】
(对于没有语言基础的同学来说理解这个可能会比较吃力,可以暂时简单理解成是unity人为设计规定的一种数据类型,可以像int那样使用它)
static function Ray (origin :
Vector3
, direction :
Vector3
) : Ray 【构造】
Origin: 射线的起点 direction:射线的方向 ;
具体参数变量请参考官方脚本文档。
举个例子吧。(下面会一一讲解代码)
//用鼠标拾取物体
鼠标碰到cube就会移动到另一个plane中。
这里除了Ray还有Physics.Raycast,这两者密不可分,下面 一 一阐述
(下面主要是解释代码,莫名其妙的地方联系代码,跨度有点大,后来都忘了例子是什么了QAQ)
刚刚接触ray的时候感觉Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);有点不理解,只是记下来这句可以从摄像机发出一条射线,
那么这条射线的源点在哪,又是沿什么方向呢?
(体会:不理解或是第一次见的类、结构一定要亲自查API文档,并在脚本中试一试;看了文档还是不理解就百度、问人)
文档中说:产生的射线是在世界空间中,从相机的近裁剪面开始并穿过屏幕position(x,y)像素坐标(position.z被忽略)。
那近裁面和屏幕是什么关系呢?是无限接近吗?不知道啊.....~~~~(>_<)~~~~ 有时间要好好研究一下摄像机!有人知道的话,请告诉我~
那么为什么要把鼠标位置转化为屏幕位置呢?
因为单位不一样;
屏幕空间点用像素定义,屏幕的左下为(0,0);右上是(PixelWidth,pixelHeight).Z的位置是以世界单位衡量的到相机的距离。是像素坐标。
而摄像机的Vector3则是世界坐标,所以需要把屏幕上的点转化为世界坐标。
ScreenPointToRay()函数可以把屏幕像素坐标变成一条射线。
下面说说Physics.Raycast()
API文档中只给出这几个方法:
public static bool Raycast(
Ray
ray,
RaycastHit
hitInfo, float distance, int layerMask);
public static bool Raycast(
Ray
ray, float distance, int layerMask);
public static bool Raycast(
Vector3
origin,
Vector3
direction, float distance, int layerMask);
public static bool Raycast(
Vector3
origin,
Vector3
direction,
RaycastHit
, float distance ,int layerMask );
但是我在VS里却可以找到更多的方法(经常看到别人只用到了两个变量,特意查了一下),如下图:
不过我个人觉得还是用给的4个函数好点,因为用4个参数可以很容易看出你的意图,即代码的可读性会变高。
这里说一下public static bool Raycast(
Ray
ray,
RaycastHit
hitInfo, float distance, int layerMask);
其他都差不多;
Ray
ray是射线;
RaycastHit
hitInfo是碰撞信息;float distance是碰撞距离;int layerMask是碰撞的层
这4个参数,我一开始不太理解的地方是:
RaycastHit
hitInfo是用来记录从raycast函数中得到的信息反馈。(out关键字,这个输出参数不知道的话还是去补一下C#吧...)
这是什么?没概念!好抽象啊!什么信息?谁的信息?有什么用?
(是的,遇到unity定义的一些概念就会有些不理解,这很正常。而这些人为定义的抽象概念,unity一般会用结构体来定义,而不是类,这也是struct和class的区别之一吧。和Vector3,Ray一样,都是结构体,都是一些概念。)
下面就来看看RaycastHit是什么鬼吧。
上面用拾取物体的例子先是申明了一个RaycastHit类型的hit变量,在Physics.Raycast()方法后,hit这个变量就携带了射线碰撞到那个物体的一些信息(这里碰到的是方块cube)。
这包括哪些信息呢?如图:
(不知道的概念,自己写一些简单代码去试试,会受益匪浅!)
而这里就用hit得到了transform信息,有了cube的transform,我们不就可以控制它的移动了吗。
也说一下int layerMask吧。
可以看到是int类型,我们之前申明并初始化了targetMask = LayerMask.GetMask("target");【这个方法在圣典的中文API中貌似没有】
LayerMask.GetMask()方法就是把target层用返回一个对应的整数。
Vector3 offset = new Vector3(15, 0, 0);//设置cube要移动的距离;
hit.transform.position = hit.transform.position + offset;//移动cube;
Physics.Raycast(ray, out hit, 100f, targetMask)
总的来说,这句话的意思是:从摄像机发射一条射线,射线的范围是100米,只和target层发生碰撞,碰撞后得到碰撞体的信息,并返回一个布尔值。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/很楠不爱3/article/detail/387468
推荐阅读
article
GAT
:
图
注意力
模型介绍及
PyTorch
代码分析_
graph
attentional
layer
...
GAT
:
图
注意力
模型介绍及代码分析原理
图
注意力
层(Graph Attentional Layer)
图
中每一个节点都由d...
赞
踩
article
第
2
周学习:
卷积
神经网络
基础
_
fc
layer
...
week
2
_
fc
layer
fc
layer
卷积
神经网络
...
赞
踩
article
Llama
-7b-hf和
vicuna
-7b-
delta
-v0合并成
vicuna
-7b-v0_
you
...
最近使用pandagpt需要
vicuna
-7b-v0,重新过了一遍,前段时间部署了
vicuna
-7b-v3,还是有不少差...
赞
踩
article
Java
餐饮酒店
管理系统
PC端,使用
SpringBoot
、Layer,
Beetl
_
java
开发 sp...
Java
餐饮酒店
管理系统
PC端,使用
SpringBoot
、Layer,
Beetl
_
java
开发
springboot
p...
赞
踩
article
神经网络
设计
:(
block
)块
视角
和
(
layer
)层
视角
_
block
和
layer
...
层
视角
更侧重于理解
和
展示模型的细节
和
逐步处理流程,而块
视角
则更偏向于实现模型结构的抽象化、模块化
和
高效复用,两者结合有助...
赞
踩
article
YOLOv5
、
YOLOv8
改进
ELAN
系列:首发结合最新
efficient
Layer
Aggreg...
结合最新Extended
efficient
Layer
Aggregation
Networks
结构,高效的聚合
网络
设...
赞
踩
article
YOLOv8
进阶
ELAN
:融合高效
Layer
Aggregation Networks结构,提升计算...
通过结合
YOLOv8
的目标检测能力和
ELAN
的高效网络设计,我们可以实现更准确、更快速的目标检测。本文详细介绍了我们对Y...
赞
踩
article
YOLOv8
升级版
ELAN
结合
efficient
Layer
Aggregation
Network...
对于YOLO系列算法的更新升级,不仅在网络架构上进行了多次尝试,还融合了其他优秀的网络结构来提升其性能,本文中就介绍了一...
赞
踩
article
Flutter
框架性泛
学习
系列之七、
Flutter
插件
层(
Plugin
Layer)原理_flutt...
任何知识体系,都需要系统的去
学习
,有一个大概的框架,
学习
才能如遇得水。知道自己
学习
的是什么,属于知识体系中的哪一环。
学习
...
赞
踩
article
借助 AI 我为
Raycast
制作了
一个
可以
OCR
中文
的
插件
_
raycast
怎么设置
中文
...
本文速通:最近用了
Raycast
,真的很棒!但是没有好用的
中文
OCR
插件
,不怎么会写 Typescript 的我,...
赞
踩
article
MacOS
新晋神器——
Raycast
...
MacOS
新晋效率神器_raycastraycast 前言 为...
赞
踩
article
UnityVR--组件4--
Ray
/
Ray
cast
/
Linecast
/
OverlapSphere
...
射线组件及射线检测,可以应用到鼠标点击、手柄点击、拖拽、射击等场景UnityVR--组件4--
Ray
/
Ray
cast
/L...
赞
踩
article
【
Unity3D
】发射(
Ray
cast)物理
射线
(
Ray
)_
unity
raycast
...
碰撞体组件Collider中介绍了 2 个碰撞体之间的碰撞检测,本文将介绍物理
射线
与碰撞体之间的碰撞检测。物理
射线
由 R...
赞
踩
article
Physics
.
Ray
cast
和
Ray
(
射线
)的
理解
...
在游戏中,我们常常要用到鼠标来控制物体的移动或是鼠标拾取某个物体。还有射击游戏里,子弹打中靶子......这些都需要Ph...
赞
踩
article
如何使用
Raycast
一键
打开
预设
工作
环境...
工作
中,你一定遇到过这样的场景:你正在认真写代码,线上突然出现报警。看到报警信息之后,你不得不
打开
浏览器,点开收藏夹,打...
赞
踩
article
我把
Mac
上
的
快速
启动器
从
Alfred
换成了
Raycast
...
Alfred
是
Mac
平台上
的
一个实用工具,它可以帮助用户
快速
启动应用程序、执行各种任务和自定义工作流程,提高用户
的
...
赞
踩
相关标签
深度学习
图论
机器学习
神经网络
pytorch
大数据
llama
gpt
agi
chatgpt
java
spring boot
开发语言
bootstrap
mybatis
人工智能
计算机视觉
YOLO
目标跟踪
flutter
学习
Dart
Android
iOS
笔记