一般的射線射中物體後就被阻擋了,假如碰到物體後,就會被攔截。如果我們想實現穿透某些物體,或者使射線不穿透ui的話。這時候就需要穿透的知識了。
下面寫乙個簡單的射線。
public transform raystartpoint;
private ray ray;
// use this for initialization
void start ()
ray =new ray(raystartpoint.position, transform.forward);
raycasthit hit;
if (physics.raycast(ray,out hit, 500))
//列印碰撞資訊
print(hit.collider.name);
//畫線,使其射線視覺化。
debug.drawline(raystartpoint.position, hit.point, color.red,100);
射線只碰撞第乙個方塊就截斷了。列印資訊也為第乙個方塊的名字。
下面我們再來添兩句**,使其實現穿透效果,讓射線可以穿透前兩個射到第三個方塊身上。
首先申請乙個變數。
//定義乙個公共的層級,只選定layermask層內的碰撞器,其它層內碰撞器忽略。選擇性碰撞
**public layermask mask;**
//也可以這樣寫:
// public layermask mask = 1 << 8;開啟第8的層
// ~(1 << 10)開啟除了第10之外的層。
// ~(1 << 0)開啟所有的層。
// (1 << 10) | (1 << 8)開啟第10和第8的層。
然後將if條件,改為以下**,就可以實現穿透效果啦。mask即為選擇的層,也就是只和mask層相撞,否則不撞,或穿透。
**if (physics.raycast(ray, out hit, 500, mask))**
效果如下。
是不是很簡單呢。可能很多童鞋看不懂layermask。下面就來細說一下它。
這篇博文主要的知識點就是對layermask的理解。
layermask實際上是乙個位碼操作,在unity3d中一共有32個layer層,並且不可增加。
按位運算子:~、|、&、^。位運算子主要用來對二進位制位進行操作。
按位運算子:左移運算子<<,左移表示乘以2,左移多少位表示乘以2的幾次冪。
舉個栗子:
var temp = 14 << 2; 表示十進位制數14轉化為二進位制後向左移動2位。
temp最後計算的值為14乘以2的平方,temp = 56;
同理,右移運算子》,移動多少位表示除以2的幾次冪。
上面是個基礎知識的補充。
在unity官方中給出的描述是:layers通常被攝像機用來渲染部分場景,和燈光照射部分場景使用。但是它們也可以用來做射線檢測時忽略一些collider或collision使用。
在**中使用時如何開啟某個layers?
layermask mask = 1 << 你需要開啟的layers層。
layermask mask = 0 << 你需要關閉的layers層。
舉幾個栗子:
layermask mask = 1 << 2; 表示開啟layer2。
layermask mask = 0 << 5;表示關閉layer5。
layermask mask = 1<<2|1<<8;表示開啟layer2和layer8。
layermask mask = 0<<3|0<<7;表示關閉layer3和layer7。
上面也可以寫成:
layermask mask = ~(1<<3|1<<7);表示關閉layer3和layer7。
layermask mask = 1<<2|0<<4;表示開啟layer2並且同時關閉layer4.
unity發射斜射線 Unity發射射線
void update shootraya shootrayb private void shootraya 例項化射線,引數1 開始位置,引數2 結束位置 ray ray new ray vector3.zero,transform.position raycasthit hit 發射乙個長度為1...
Unity 射線檢測
要使用射線檢測,物體必須是觸發器或者碰撞器。什麼是觸發器,碰撞器請看 射線檢測函式在physics 類中。由於射線無法看見,除錯起來非常不方便。unity 給我們提供了乙個畫射線的方法debug.drawray,便於除錯。debug.drawray需要在update中使用,否則渲染一幀就會消失。一幀...
Unity 射線檢測
射線是乙個無窮的線,開始於origin並沿著direction方向。例 ray ray new ray new vector3 1,1,1 new vector3 0,0,0 例2 ray ray2 camera.main.screenpointtoray input.mouseposition 從...