1. 程式人生 > >Unity射線基礎技巧附加檢測的小例子(Unity萌新的備忘錄)

Unity射線基礎技巧附加檢測的小例子(Unity萌新的備忘錄)

最近開始研究U3D,它的強大就不多說了, 今天研究了研究射線相關東西,總結了些東西放上來,一來做個筆記,二來和大家分享分享!嘿嘿~ 如果有不對的地方希望指出哈 !- _ - 進入正題

射線:射線是3D世界中一個點向一個方向發射的一條無終點的線,在發射軌跡中與其他物體發生碰撞時,它將停止發射 。
用途:射線應用範圍比較廣, 多用於碰撞檢測(如:子彈飛行是否擊中目標)、角色移動等 等。

相關API:

1、Ray Camera.main.ScreenPointToRay(Vector3 pos) 返回一條射線Ray從攝像機到螢幕指定一個點
2、Ray Camera.main.ViewportPointToRay(Vector3 pos) 返回一條射線Ray從攝像機到視口(視口之外無效)指定一個點
3、Ray 射線類
4、RaycastHit 光線投射碰撞資訊
5、bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask)
當光線投射與任何碰撞器交叉時為真,否則為假。
bool Physics.Raycast(Ray ray, Vector3 direction, RaycastHit out hit, float distance, int layerMask)
在場景中投下可與所有碰撞器碰撞的一條光線,並返回碰撞的細節資訊()。
bool Physics.Raycast(Ray ray, float distance, int layerMask)
當光線投射與任何碰撞器交叉時為真,否則為假。
bool Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit,float distance, int layerMask)
當光線投射與任何碰撞器交叉時為真,否則為假。

注意:如果從一個球型體的內部到外部用光線投射,返回為假。
引數理解:

  origin : 在世界座標中射線的起始點
  direction: 射線的方向
  distance: 射線的長度
  hit: 使用c#中out關鍵字傳入一個空的碰撞資訊類,然後碰撞後賦值。可以得到碰撞物體的transform,rigidbody,point等資訊。
  layerMask: 只選定Layermask層內的碰撞器,其它層內碰撞器忽略。 選擇性的碰撞
6、RaycastHit[] RaycastAll(Ray ray, float distance, int layerMask)
投射一條光線並返回所有碰撞,也就是投射光線並返回一個RaycastHit[]結構體。

下面一個利用射線做的拾取的小例子(將程式碼直接拖拽到主相機上)

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class RayTest : MonoBehaviour {
 5 
 6     // Use this for initialization
 7     void Start () {
 8     
 9     }
10     
11     // Update is called once per frame
12     void Update () 
13     {
14         if
(Input.GetMouseButton(0)) 15 { 16 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//從攝像機發出到點選座標的射線 17 RaycastHit hitInfo; 18 if(Physics.Raycast(ray,out hitInfo)) 19 { 20 Debug.DrawLine(ray.origin,hitInfo.point);//劃出射線,只有在scene檢視中才能看到 21 GameObject gameObj = hitInfo.collider.gameObject; 22 Debug.Log("click object name is " + gameObj.name); 23 if(gameObj.tag == "boot")//當射線碰撞目標為boot型別的物品 ,執行拾取操作 24 { 25 Debug.Log("pick up!"); 26 } 27 } 28 } 29 } 30 }

萌新的備忘錄