使用Unity3d的Physics.Raycast()的用法做子彈射擊


 

Class Functions

1) static function Raycast (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
在origin坐標上建立一個方向為direction,距離為distance的射線,可以與layerMask(層遮罩)之外的所有的collider碰撞;
返回true如果碰撞到任何物體,否則返回false。 distance默認為無限遠,layerMast默認為kDefaultRaycastLayers
只與第一個接觸到的物體產生碰撞。
 

static function Raycast (origin : Vector3, direction : Vector3, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool

多了一個out hitInfo: RaycastHit, 如果碰撞到物體,具體碰撞數據和被碰撞體都會被記錄在RaycastHit上,包括碰撞位置,碰撞位置法線,被碰撞體的Transform節點等信息。其他一樣。
 
腳本:
var explosionPosition: Vector3;
var hit: RaycastHit;
if(Physics.Raycast(transform.position,target.position,hit,100)){
explosionPosition=hit.point;
}
 

static function Raycast (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool

static function Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool

直接由一個射線ray來指示位置和方向。其他一樣。
 
2) static function RaycastAll (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : RaycastHit[]

static function RaycastAll (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layermask : int = kDefaultRaycastLayers) : RaycastHit[]

 
與所有在ray這條射線上的物體碰撞並返回所有被碰撞體,RaycastHit[]。 其他同RaycastAll一樣。
 
 

3)static function Linecast (start : Vector3, end : Vector3, layerMask : int = kDefaultRaycastLayers) : bool

static function Linecast (start : Vector3, end : Vector3, out hitInfo : RaycastHit, layerMask : int = kDefaultRaycastLayers) : bool

從start到end畫一條直線,其他與Raycast和RaycastAll類似。 這個通常可以用於檢測AI是否能看到目標物體等功能。
 
4) static function OverlapSphere (position : Vector3, radius : float, layerMask : int = kAllLayers) : Collider[]
檢測在position位置的半徑radius的球形范圍內是否存在可碰撞體並返回所有檢測到的collider
 
5) static function CheckSphere (position : Vector3, radius : float, layerMask : int = kDefaultRaycastLayers) : bool
當任何物體碰到position位置的半徑為radius的球形范圍時返回true;
 
6) static function CheckCapsule (start : Vector3, end : Vector3, radius : float, layermask : int = kDefaultRaycastLayers) : bool
 
當任何物體碰到定義的膠囊體范圍時返回true;
 
7) static function IgnoreCollision (collider1 : Collider, collider2 : Collider, ignore : bool = true) : void
控制collider1和collider2 是否可以碰撞。 ignore=true 兩者將不會計算是否碰撞, ignore=false 則計算兩者是否有碰撞。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM