Unity3D_(API)射線檢測
阿新 • • 發佈:2018-11-11
Unity射線檢測官方文件: 傳送門
一、檢測前方是否有遊戲物體(射線無限長度)
二、檢測前方是否有遊戲物體(射線長度為1m)
三、檢測前方遊戲物體碰撞資訊(射線無限長度):
四、指定檢測碰撞Tag層
2D射線檢測:使用Physics2D.Raycast()
Raycast()和RaycastAll()區別:Raycast()只檢測當前遊戲物體,RaycastAll()檢測前方所有遊戲物體(返回一個數組)
建立一個Cube作為地面,重新命名為Ground
建立一個Cube作為遊戲玩家(重新命名為Player),遊戲玩家下再新建一個Cube(重新命名為Ray)作為射線發射起點
建立三個Cube作為目標,用來判斷射線是否檢測到目標
給Ray新增射線檢測Player.cs指令碼
一、檢測前方是否有遊戲物體(射線無限長度):
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { // Use this for initializationPlayer.csvoid Start () { } // Update is called once per frame void Update () { //射線發射的起始位置和方向 Ray ray = new Ray(transform.position+transform.forward, transform.forward); //Raycast()方法判斷射線是否被檢測 bool isCollider = Physics.Raycast(ray); //輸出檢測資訊,只能為True或FalseDebug.Log(isCollider); } }
//射線發射的起始位置和方向 Ray ray = new Ray(transform.position+transform.forward, transform.forward); //Raycast()方法判斷射線是否被檢測 bool isCollider = Physics.Raycast(ray); //輸出檢測資訊,只能為True或False Debug.Log(isCollider);
二、檢測前方是否有遊戲物體(射線長度為1m):
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { //射線發射的起始位置和方向 Ray ray = new Ray(transform.position+transform.forward, transform.forward); //Raycast()方法判斷射線是否被檢測 bool isCollider = Physics.Raycast(ray,1); //輸出檢測資訊,只能為True或False Debug.Log(isCollider); } }Player.cs
//射線發射的起始位置和方向 Ray ray = new Ray(transform.position+transform.forward, transform.forward); //Raycast()方法判斷射線是否被檢測 bool isCollider = Physics.Raycast(ray,1); //輸出檢測資訊,只能為True或False Debug.Log(isCollider);
三、檢測前方遊戲物體碰撞資訊(射線無限長度):
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { //射線發射的起始位置和方向 Ray ray = new Ray(transform.position+transform.forward, transform.forward); RaycastHit hit; bool isCollider = Physics.Raycast(ray,out hit); //輸出是否碰撞到物體 Debug.Log(isCollider); //輸出碰撞物體名字 Debug.Log(hit.collider); //輸出碰撞到物體位置 Debug.Log(hit.point); } }Player.cs
//射線發射的起始位置和方向 Ray ray = new Ray(transform.position+transform.forward, transform.forward); RaycastHit hit; bool isCollider = Physics.Raycast(ray,out hit); //輸出是否碰撞到物體 Debug.Log(isCollider); //輸出碰撞物體名字 Debug.Log(hit.collider); //輸出碰撞到物體位置 Debug.Log(hit.point);
四、指定檢測碰撞Tag層
給Cube-1 新增 Gary1標籤,其它Cube不做改動
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { //射線發射的起始位置和方向 Ray ray = new Ray(transform.position+transform.forward, transform.forward); //需要進行碰撞的Layout層 bool isCollider = Physics.Raycast(ray,Mathf.Infinity,LayerMask.GetMask("Gary1")); //輸出是否碰撞到物體 Debug.Log(isCollider); } }Player.cs
//射線發射的起始位置和方向 Ray ray = new Ray(transform.position+transform.forward, transform.forward); //需要進行碰撞的Layout層 bool isCollider = Physics.Raycast(ray,Mathf.Infinity,LayerMask.GetMask("Gary1")); //輸出是否碰撞到物體 Debug.Log(isCollider);
Raycast()和RaycastAll()區別