< Return to Video

Raycasting - Unity Official Tutorials

  • 0:00 - 0:02
    Raycast とはある地点から透明な線 (Ray) を
  • 0:02 - 0:04
    特定の方向に引いて
  • 0:04 - 0:07
    その Ray 上のどこかでコライダがあるか
  • 0:07 - 0:09
    検知するものです。
  • 0:09 - 0:11
    例をあげると、
  • 0:11 - 0:13
    銃から弾を発射するケースです。このレッスンでは
  • 0:13 - 0:15
    キャラクターが、
  • 0:15 - 0:17
    裏切り者で父を殺した敵である悪魔の箱を撃つことにしましょう。
  • 0:17 - 0:20
    Raycast 関数の文法は次のようなものです。
  • 0:20 - 0:22
    最初はまぎわらしいかもしれませんが
  • 0:22 - 0:25
    一回それぞれの部分で何がおこなわれるのか
  • 0:25 - 0:26
    理解すれば良く意味が分かるようになります。
  • 0:26 - 0:28
    最初に Ray の原点は
  • 0:28 - 0:30
    ワールド空間座標のどこかの地点です。
  • 0:30 - 0:32
    このレッスンでは銃の銃口の前の地点を
  • 0:32 - 0:34
    どこか選んで
  • 0:34 - 0:38
    Vector3 として X, Y, Z を格納します。
  • 0:38 - 0:40
    しかし、ワールド空間座標の向きは
  • 0:40 - 0:42
    撃つ方向に向いていないため
  • 0:42 - 0:44
    二つめの Vector3 により向き(direction) を
  • 0:44 - 0:46
    格納する必要があります。
  • 0:46 - 0:48
    この二つの Vector3 変数により
  • 0:48 - 0:51
    Ray が構成されます。さらに Ray 変数により
  • 0:51 - 0:54
    代用が可能であり、このデータ型で
  • 0:54 - 0:56
    二つの Vector3 変数を格納出来ます。
  • 0:56 - 0:58
    コードは次のようになります。
  • 1:02 - 1:04
    関数の次の引数は
  • 1:04 - 1:06
    RaycastHit 変数であり、
  • 1:06 - 1:08
    コライダの衝突にもとづいて情報を格納します。
  • 1:08 - 1:10
    これにより、コードの中で検索をかけて
  • 1:10 - 1:13
    どのオブジェクトが Ray と交差するか判定出来ます。
  • 1:13 - 1:16
    最後に、必須ではない引数が二つあります。
  • 1:16 - 1:18
    ひとつは Distance であり Ray の長さが決まり、
  • 1:18 - 1:20
    もし省略した場合、 Ray の長さはデフォルトで
  • 1:20 - 1:22
    無限(infinity)となります。
  • 1:22 - 1:24
    そしてレイヤーマスク(Layer Mask)です。これは
  • 1:24 - 1:27
    Unity のレイヤーシステムにおける特定のレイヤー番号であり、
  • 1:27 - 1:29
    もし Ray に無視させたいオブジェクトがある場合、
  • 1:29 - 1:30
    そのレイヤーに配置することができます。
  • 1:30 - 1:32
    それでは Raycast を使用した実用的な例を
  • 1:32 - 1:34
    みていきます。
  • 1:34 - 1:36
    このサンプルではパラシュートつきの壷があり
  • 1:36 - 1:37
    フロアに近いとき、パラシュートが
  • 1:37 - 1:39
    開きます。
  • 1:40 - 1:42
    壷は二つの部分から構成されていて
  • 1:42 - 1:44
    パラシュートと壷そのものです。
  • 1:44 - 1:46
    パラシュートには二つのアニメーションがあり、
  • 1:47 - 1:48
    一つはパラシュートを開くためののものであり、
  • 1:49 - 1:50
    もうひとつは閉じるためのものです。
  • 1:51 - 1:53
    このサンプルでは Raycast を下方向に
  • 1:53 - 1:55
    行なってフロアから壷がどれくらい
  • 1:55 - 1:57
    離れているかみて、environment コライダを
  • 1:57 - 2:00
    見つけることでフロアの確認を行ないます。
  • 2:01 - 2:03
    environment コライダは
  • 2:03 - 2:05
    environment という単語でタグづけされています。
  • 2:05 - 2:09
    スクリプトの中でそのタグを探しています。
  • 2:11 - 2:12
    Raycast 関数は if 文の中に
  • 2:12 - 2:16
    配置されているので、もし戻り値が true である場合、
  • 2:16 - 2:18
    つまり何かと交差した場合、
  • 2:18 - 2:20
    if 文の中のコマンドが実行されて
  • 2:20 - 2:22
    RaycastHit 変数にクエリをかけて
  • 2:22 - 2:25
    何をヒットしたかが取得できます。
  • 2:26 - 2:29
    今回 if 文の中に
  • 2:29 - 2:33
    Physics.Raycast を記述して、landingRay 変数により
  • 2:33 - 2:36
    箱の位置および下向きの方向を
  • 2:36 - 2:38
    格納します。Vector3.down というショートカット
  • 2:38 - 2:40
    を今回使用しています。
  • 2:40 - 2:42
    そしてこれを Raycast で使用する Ray としています。
  • 2:42 - 2:44
    RaycastHit 変数である hit は
  • 2:44 - 2:46
    下向きに Raycast するときに、
  • 2:46 - 2:48
    Ray によりヒットを受けるもの全てを格納します。
  • 2:48 - 2:50
    そして Ray の距離、すなわち length は
  • 2:50 - 2:53
    deploymentHeight 変数により定義されます。
  • 2:53 - 2:58
    もし Ray が environment タグを持つコライダと
  • 2:58 - 3:02
    交差した場合、DeployParachute 関数をコールします。
  • 3:02 - 3:05
    この関数は boolean 型である deployed フラグに true をセットして
  • 3:05 - 3:08
    反復しないようにします。
  • 3:09 - 3:11
    次に Rigidbody の Drag を
  • 3:11 - 3:14
    に parachuteEffectiveness 変数の値をセットします。
  • 3:14 - 3:16
    このため 壷がパラシュートにより抑制されたかのように
  • 3:16 - 3:18
    動きを遅くします。
  • 3:18 - 3:20
    さらに parachute オブジェクトのアニメーションを
  • 3:20 - 3:22
    再生して、
  • 3:22 - 3:24
    これは public 変数に割り当てする
  • 3:24 - 3:25
    ゲームオブジェクトです。
  • 3:25 - 3:28
    次に別の OnCollisionEnter があり、
  • 3:28 - 3:30
    閉じるアニメーションを再生します。
  • 3:30 - 3:32
    このため、地面または別のオブジェクトに当たると、パラシュートは
  • 3:32 - 3:35
    閉じることが出来ます。
  • 3:36 - 3:40
    ここで Ray の length に 4 をセットするために
  • 3:40 - 3:42
    deplomentHeight に 4 をセットします。
  • 3:42 - 3:45
    Rigidbody の Drag に 8 をセットするために
  • 3:46 - 3:49
    Parachute Effectiveness に 8 をセットします。
  • 3:49 - 3:51
    そして prop_parachuteCrate_chute オブジェクト を
  • 3:51 - 3:54
    Parachute 変数の上にドラッグしています。
  • 3:54 - 3:57
    Animation コンポーネントがアタッチされているオブジェクト
  • 3:57 - 3:59
    であり、開いたり閉じたりするアンメーションを
  • 3:59 - 4:01
    再生するためです。
  • 4:01 - 4:03
    それでは再生をもう一回だけみてみましょう。
  • 4:07 - 4:09
    シーンビューまたはゲームビューで
  • 4:09 - 4:11
    Raycast が描画されないことは
  • 4:11 - 4:13
    覚えておくべき
  • 4:13 - 4:15
    です。一方で
  • 4:15 - 4:18
    Debug.DrawRay 関数を使用すれば
  • 4:18 - 4:21
    Ray のプレビューをすることが出来ます。
  • 4:21 - 4:24
    Debug.DrawRay を追加することで
  • 4:24 - 4:26
    Vector3.down の向きに
  • 4:26 - 4:28
    箱の位置からの
  • 4:28 - 4:30
    視覚的な Ray を描画して、
  • 4:30 - 4:34
    長さとしては length に deploymentHeight を掛け算することが出来ます。
  • 4:34 - 4:36
    こうすることで、
  • 4:36 - 4:38
    下の if 文で実際に行なう Raycast と一致します。
  • 4:39 - 4:41
    再生を行なうことで、
  • 4:41 - 4:43
    Unity 上のシーンビューにて Ray が
  • 4:43 - 4:46
    描画されるところを確認することができます。
    (翻訳:gamesonytablet)
Title:
Raycasting - Unity Official Tutorials
Description:

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

Japanese subtitles

Revisions