Unity3D總結 關於射線碰撞

2021-07-03 14:06:37 字數 2460 閱讀 8708

1.static function 

raycast

(origin

: vector3

,direction

: vector3

,distance

: float = 

mathf.infinity

,layermask

: int = kdefaultraycastlayers) : bool

乙個靜態的發射射線的方法,在場景中投下可與所有碰撞器碰撞的一條光線。

引數解釋:

origin:射線起始點

direction:射線方向

distance:射線長度

layermask:

只選定layermask層內的碰撞器,其它層內碰撞器忽略。

返回布林型別,當光線投射與任何碰撞器交叉時為真,否則為假。

(注意:如果從乙個球型體的內部到外部用光線投射,返回為假。 )這一點測試不成功!

2.static functionraycast(origin: vector3,direction: vector3,out hitinfo: raycasthit,distance: float = mathf.infinity,layermask: int = kdefaultraycastlayers) : bool

在場景中投下可與所有碰撞器碰撞的一條光線,並返回碰撞的細節資訊。

returns

當光線投射與任何碰撞器交叉時為真,否則為假。

使用c#中out關鍵字傳入乙個空的碰撞資訊類,然後碰撞後賦值。可以得到碰撞物體的transform,rigidbody,point等資訊。

詳細解釋一下:

然後設定物體的layer層級,在攝像機中設定camera.cullingmask,可以控制攝像機的渲染層級,用在射線上,可以控制射線碰撞什麼,不碰撞什麼。

//raycast hit

raycasthithit;

layermask mask = 1

<

void testray()

}

上面的例子是從當前指令碼所繫結的物體做標點向右發射長度100的射線,射線碰撞層級為8,其他層級忽略。

為了測試,我們在碰撞到物體後畫一條紅色線條,表示射線,停留一秒鐘。

上面這些是射線的一些基本操作。

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

投射一條光線並返回所有碰撞,也就是投射光線並返回乙個raycasthit結構體。

有一部分人說沒效果,我想可能是layer值沒有設定正確,layer的值應該是等於2的n次方,這個n是layer面板上的值,只要設定正確,應該是沒有問題的

Unity3D總結 關於射線碰撞

1.static function raycast origin vector3 direction vector3 distance float mathf.infinity layermask int kdefaultraycastlayers bool 乙個靜態的發射射線的方法,在場景中投下可...

unity3d關於碰撞問題

這個是我做忍者遊戲出現的問題,做個記錄也為以後有人遇到也可以借鑑。因為剛接觸unity,所以對其所知甚少,說錯的地方請指教。渲染幀的時間跟不上程式處理力速度的時間,所以產生了人物碰撞體碰到了牆,然後碰到了地面了,在渲染下一幀時,因為最後碰到的是地,所以發生碰撞 地面的事件,那它是怎麼回來的呢,應該是...

Unity3D 碰撞測試

碰撞測試這個再遊戲的開發中是很有必要的,當敵人的攻擊的時候,發生碰撞這時候就會造成一定的傷害,因此我們需要根據受到的傷害對使用者的生命值進行控制,因此碰撞的測試是 我們在遊戲的開發過程中需要的一種比較重要的資料。在unity中的碰撞測試有兩種,一種是碰撞,一種是觸發!一種屬於物理碰撞,一種屬於非物理...