Unity3D的射线检测基本用法 以及 C#中out和ref应用

本文详细介绍了Unity中射线检测的基本用法,包括如何通过主摄像机发射射线,检测碰撞并获取碰撞信息。同时,文章还解释了C#中的out和ref关键字的区别及其在射线检测中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对Unity中的射线检测做一个记录

 

 

 


射线检测:

记录一下Unity中射线检测的基本用法:

        if (Input.GetMouseButtonDown(0))  //点击了鼠标左键
        {
            //以主摄像机,将屏幕上的一个点转换为射线
            Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitInfo;  //射线对象(结构体),存储了相关信息
            //发出射线检测碰撞,返回一个布尔值(是否发生碰撞),这里的out下面会详解
            bool isCollider = Physics.Raycast(ray,out hitInfo);
            //碰到了标签是123的碰撞盒物体
            if (isCollider && hitInfo.collider.tag =="123")   
            {
                Debug.log("碰到了!");
            }
        }

只要发出的射线碰到了带有碰撞盒的物体,都会反馈回该物体的详细信息

要检测的物体一定,一定,一定要有碰撞盒!

对于多层的情况希望有检测,可以在后面加层级即可

      if (Physics.Raycast(muzzlePoint.position,
         cameraTransform.TransformDirection(Vector3.forward),
         out info, 100, layer))

100:最大距离

layer:LayerMask,希望检测的层级,可以指定多个(MIX)

 

 


C#中的out和ref:

out和ref其实可以理解为C++中的引用概念

ref:

没有加ref:

void add(int a) 
{ 
     a += 1; 
} 
int x= 1; 
add(x); 
Console.WriteLine(x);

输出:1

方法add并没有改变x的值

加了ref之后:

void add(ref int a)
{
    a += 1;
}
int x= 1;
add(ref x);
Console.WriteLine(x);

输出:2

方法add改变了x的值

out:

没有加out:

int x;
change(x);
void change(int a)
{
    a= 1;
}
Console.WriteLine(x);

输出:0

方法change并没有改变x的值

加了out之后:

int x; 
change(out x); 
void change(out int a)
{ 
        a= 1; 
} 
Console.WriteLine(x);

输出:1

方法change改变了x的值

区别:

  • 原理

ref:重点是把值传给调用方法

out:重点是得到调用方法的值(可以说是第二个“return”)

  • 使用

ref:使用前要注意给变量赋初值

out:无需赋初值

 

 

 


希望可以帮到你

商业转载 请联系作者获得授权,非商业转载 请标明出处

欢迎访问我的博客 is-hash.com

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轻舟在过

您的支持是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值