Unity3D总结:关于射线碰撞
方法一:Physics.Raycast 光线投射
1.static function Raycast (origin : Vector3, direction : Vector3, distance :
float = Mathf.Infinity, layerMask :
int = kDefaultRaycastLayers) : bool
一个静态的发射射线的方法,在场景中投下可与全部碰撞器碰撞的一条光线。
參数解释:
origin:射线起始点
direction:射线方向
distance:射线长度
layerMask:仅仅选定Layermask层内的碰撞器,其他层内碰撞器忽略。
返回布尔类型,当光线投射与不论什么碰撞器交叉时为真。否则为假。
(注意:假设从一个球型体的内部到外部用光线投射,返回为假。
)这一点測试不成功!
2.static function Raycast (origin : Vector3, direction : Vector3, out
hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask :
int = kDefaultRaycastLayers) : bool
在场景中投下可与全部碰撞器碰撞的一条光线。并返回碰撞的细节信息。
Parameters參数
-
originThe starting point of the ray in world coordinates.
在世界坐标。射线的起始点。 -
directionThe direction of the ray.
射线的方向。 -
distanceThe length of the ray
射线的长度。 -
hitInfoIf true is returned, hitInfo will contain more information about where the collider was hit (See Also: RaycastHit).
假设返回true,hitInfo将包括碰到器碰撞的很多其它信息。 -
layerMaskA Layer mask that is used to selectively ignore colliders when casting a ray.
仅仅选定Layermask层内的碰撞器,其他层内碰撞器忽略。
当光线投射与不论什么碰撞器交叉时为真,否则为假。
使用c#中outkeyword传入一个空的碰撞信息类,然后碰撞后赋值。能够得到碰撞物体的transform,rigidbody,point等信息。
然后设置物体的Layer层级。在摄像机中设置camera.cullingmask,能够控制摄像机的渲染层级。用在射线上。能够控制射线碰撞什么,不碰撞什么。
//Raycast hit
RaycastHit hit;
LayerMask mask = 1 << 8;
void testRay(){if(Physics.Raycast(transform.position,Vector3.right,out
hit,100, mask.value)){
Debug.DrawLine(transform.position,hit.point,Color.red,1);
}
}
上面的样例是从当前脚本所绑定的物体做标点向右发射长度100的射线,射线碰撞层级为8。其它层级忽略。
为了測试,我们在碰撞到物体后画一条红色线条。表示射线,停留一秒钟。
上面这些是射线的一些基本操作。
方法二:Physics.RaycastAll 光线投射
static function RaycastAll (ray : Ray, distance :
float = Mathf.Infinity,
layerMask : int = kDefaultRaycastLayers) : RaycastHit[]
static function RaycastAll (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layermask : int = kDefaultRaycastLayers) : RaycastHit[]
static function RaycastAll (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layermask : int = kDefaultRaycastLayers) : RaycastHit[]
投射一条光线并返回全部碰撞。也就是投射光线并返回一个RaycastHit[]结构体。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架