Unity 十四 射线一

Unity 提供了射线功能。
new Ray(transform.position,transform.forward);新建一条射线,确定射线的起始位置,以及射线的方向。

Physics.Raycast,发射射线,可以设置射线的长度等,射线的重要方法,这个参数种类有很多。
在这里插入图片描述
先用三个参数的。
第一个参数代表:新建的射线,第二个参数代表:射线的碰撞体(注这个参数要带 out)。第三个参数代表射线的距离。

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

public class RayTest : MonoBehaviour
{
    // Start is called before the first frame update
    private RaycastHit raytest;
    void Start()
    {
          Ray a = new Ray(transform.position,transform.forward);
    if(Physics.Raycast(a,out raytest,200)){
            Debug.Log(raytest.point);
           Debug.Log(raytest.transform.name);
        }
    }
    

}


再用一个四个参数的。
前三个参数同上,第四个参数:代表筛选层级,就是射线碰撞到哪些物体才会有反应。
在这里插入图片描述
上图中我们让小球去照射胶囊体,首先我们被射线射中的物体的层级(也就是胶囊体的层级)设置为 test,下面有两种方式可以获取层级。
1、int b = LayerMask.GetMask("test","test1");
2、int c = (1 << 9) | (1 << 10);也就是2的9次方|2的10次方,所得的值等于:2的9次方+2的10次方=1536

b 与 c 的值是相等的。

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

public class RayTest : MonoBehaviour
{
    // Start is called before the first frame update
    private RaycastHit raytest;
    void Start()
    {
        Ray a = new Ray(transform.position,transform.forward);
        int b = LayerMask.GetMask("test","test1");
        int c = (1 << 9) | (1 << 10);
        
        Debug.Log("b::::::::"+b+",,,,,c::::::"+c);
     
       if(Physics.Raycast(a,out raytest,200,b)){
     
           Debug.Log(raytest.transform.name);
        }
    }
    

}

发布了56 篇原创文章 · 获赞 24 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/u014196765/article/details/93212270