一個射線是一條從原點(origin)向指定方向(direction)無限延長的直線,在射線發(fā)射的軌跡中,可以用于檢測所碰撞到的其他物體。
射線可以應用在多方面,例如射擊游戲中的子彈、Dota類游戲的人物角色控制、移動VR的交互功能等等
Ray是一個結構體(Struct),下面將對Ray射線類相關的方法和屬性進行講解。
1.構造函數(shù)
public Ray(Vector3 origin, Vector3 direction);
參數(shù)介紹:origin:射線起點;direction:射線終點;
一般是采用從攝像機發(fā)出射線的方式創(chuàng)建一條射線,如從攝像機發(fā)射一條穿過屏幕中心的射線:
Ray ray = Camera.main.ScreenPointToRay(new Vector2(Screen.width / 2, Screen.height / 2));
2.發(fā)射射線
Physics.Raycast(),API文檔中給出這幾個方法:
public static bool Raycast(Ray ray, RaycastHit hitInfo, float distance, int layerMask);
public static bool Raycast(Ray ray, float distance, int layerMask);
public static bool Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask);
public static bool Raycast(Vector3 origin, Vector3 direction, RaycastHit , float distance ,int layerMask );
參數(shù) 說明
ray 要發(fā)射的射線
hitInfo 返回射線路徑中碰撞體的信息
distance 射線發(fā)射的距離
layerMask 射線碰撞檢測的層
3.layerMask參數(shù)
int型的變量,用于區(qū)分不同層的游戲對象,可以通過以下方法返回Layers對應的整數(shù):
targetMask = LayerMask.GetMask("cube");
4.RaycastHit類
通過transform參數(shù),就可以控制碰撞體的移動、旋轉、伸縮比例,還可以獲得碰撞體游戲對象,如:hit.transform.gameObject。
獲得游戲對象實例,就可以獲得具體碰撞體游戲對象的名稱:hit.transform.gameObject.name。
5.例子
從攝像機發(fā)射一條穿過鼠標在屏幕位置的射線,當“cube”層的游戲對象碰撞到射線,對碰撞體進行平移:
熱點新聞