Return to Video

Raycasting - Unity Official Tutorials

  • 0:00 - 0:09
    射線檢查(Raycasting)會從指定座標和軸向
    投射一條隱形線並偵測是否有碰撞體在線上
  • 0:09 - 0:11
    就像開槍的原理一樣
  • 0:11 - 0:17
    舉例來說, 我們的主角
    想要射死那背叛他父親的邪惡方塊
  • 0:17 - 0:20
    射線檢查函式的結構是這樣
  • 0:20 - 0:22
    一開始可能有點難以理解
  • 0:22 - 0:26
    但當你明白每個參數所代表的內容
    就會變得容易理解
  • 0:26 - 0:30
    首先, 射線的原點(origin)是一個世界座標的點
  • 0:30 - 0:32
    以我們的範例來說
  • 0:32 - 0:38
    我們將原點設定在槍口的位置
    利用一個三維向量(Vector3)儲存X, Y和Z軸座標
  • 0:38 - 0:42
    由於世界座標軸向不一定和射擊軸向相同
  • 0:42 - 0:46
    因此我們還需要第二個向量值
    來儲存我們的射擊軸向(direction)
  • 0:46 - 0:48
    這兩個變數組成了我們的射線
  • 0:48 - 0:51
    我們也可以帶入一個射線變數(Ray)
  • 0:51 - 0:56
    因為射線變數是一個可以儲存
    兩個三維向量的資料類別
  • 0:56 - 0:58
    射線變數用法會長得像這樣
  • 1:02 - 1:08
    下一個參數是射線碰撞參數(RaycastHit)
    用來儲存射線碰到的碰撞體資料
  • 1:08 - 1:13
    有了這個變數程式就可以呼叫
    並找到射線路徑上的遊戲物件
  • 1:13 - 1:16
    最後還有兩個選擇性參數
  • 1:16 - 1:20
    第一個是射線距離(Distance)
    用來設定射線的長度
  • 1:20 - 1:22
    如果沒有指定的話預設是無限距離
  • 1:22 - 1:27
    然後是圖層遮罩(Layer Mask)
    用來指定射線檢查可忽略的Unity圖層
  • 1:27 - 1:30
    如果你希望射線忽略某些物件
    那你可以指定到圖層遮罩裡
  • 1:30 - 1:34
    我們在來看一個射線檢查的範例
  • 1:34 - 1:39
    這個範例裡我們有一個空投箱
    它在接近地面時會打開它的降落傘
  • 1:40 - 1:44
    這個空投箱是由兩個部分組成
    降落傘和箱子
  • 1:44 - 1:46
    降落傘有兩個動畫
  • 1:47 - 1:48
    開傘動畫
  • 1:49 - 1:50
    和收傘動畫
  • 1:51 - 1:55
    同時我們需要射線檢查的軸向往下
    這樣才知道空投箱與場景地表的距離
  • 1:55 - 2:00
    然後透過搜尋environment標籤來計算碰撞體距離
  • 2:00 - 2:05
    場景的地表已經設定了environment的標籤
  • 2:05 - 2:09
    我們就可以在程式腳本裡搜尋這個標籤
  • 2:11 - 2:18
    我們將射線函式放在IF判斷式內
    所以當傳回True時表示線上有碰撞體
  • 2:18 - 2:25
    然後就會進入判斷式
    並將射線碰撞參數用hit帶出
  • 2:26 - 2:29
    所以判斷式內我們寫入射線的檢查函式
  • 2:29 - 2:36
    並設定landingRay來儲存空投箱座標
  • 2:36 - 2:40
    利用往下的簡寫Vector3.down來指定軸向
  • 2:40 - 2:44
    然後將landingRay帶入檢查射線函式
    而被帶出射線碰撞參數叫hit
  • 2:44 - 2:48
    它儲存了射線上碰到的碰撞體
  • 2:48 - 2:53
    我們已設定了deployment height變數
    來儲存射線距離
  • 2:53 - 3:02
    所以當射線碰到了environment標籤的碰撞體
    就會執行開啟降落傘的函式
  • 3:02 - 3:08
    在此函式裡會把deployed布林值設為True
    用來限制這行為只能被執行一次
  • 3:09 - 3:14
    然後我們把物件剛體的線性阻力指到
    parachuteEffectiveness這個變數
  • 3:14 - 3:18
    所以當降落傘開啟時
    空降箱的移動速度會變慢
  • 3:18 - 3:22
    然後讓降落傘物件播放開傘動畫
  • 3:22 - 3:25
    開傘動畫就是我們會指定到
    全域遊戲物件變數(parachute)的物件
  • 3:25 - 3:28
    然後我們加入一個碰撞進入函式(OnCollisionEnter)
  • 3:28 - 3:35
    讓空降箱在碰到地面或其他物件時
    播放收傘動畫
  • 3:36 - 3:42
    我們設定射線距離為4
    所以將Deplayment Height設定為4
  • 3:42 - 3:49
    設定剛體的線性阻力為8
    所以將Parachute Effectiveness設定為8
  • 3:49 - 3:54
    然後將降落傘物件拖曳到Parachute設定
  • 3:54 - 4:01
    因為它是附有動畫元件的降落傘物件
    這樣我們就可以播放開傘和關傘的動畫
  • 4:01 - 4:03
    讓我們在一次執行成果
  • 4:07 - 4:09
    有一點值得注意的是
  • 4:09 - 4:13
    雖然在遊戲或場景視圖裡你看不到射線
  • 4:13 - 4:18
    但你可以在程式腳本內加入一行
    Debug.DrawRay函式來畫出射線
  • 4:18 - 4:21
    這樣一來你就可以知道射線的位置與方向
  • 4:21 - 4:26
    Debug.DrawRay函式內
    我們帶入了空降箱的座標(transform.position)
  • 4:26 - 4:34
    以及軸向往下的簡寫(Vector3.down)
    然後將它乘上射線距離(deploymentHeight)
  • 4:34 - 4:38
    這樣一來系統就會畫出和判斷式相同的射線
  • 4:39 - 4:46
    所以, 當我們在播放一次成果時
    可以看到場景視圖畫出了一條預覽射線
Title:
Raycasting - Unity Official Tutorials
Description:

more » « less
Video Language:
English
Duration:
04:47

Chinese, Traditional subtitles

Revisions