Raycasting

[最終更新日:2020/01/30]

概要

Raycastingは、ユーザが指定したCubismのメッシュと任意の座標とが交差するかどうかを判定する機能です。
クリック/タップされた座標や、シーン中の任意のオブジェクトと指定されたメッシュとの当たり判定を取得することが可能です。
Raycastingの使用方法については こちら をご覧ください。

Cubism SDK for Unity におけるRaycastingは大きく2種類の要素によって構成されています。

  1. 判定させるアートメッシュ指定用のコンポーネント
  2. 入力された座標と指定されたアートメッシュの当たり判定を行うコンポーネント

 

1. 判定させるアートメッシュ指定用のコンポーネント

当たり判定に使用するメッシュを指定するには、CubismRaycastableを使用します。

CubismRaycastableは[Prefabのルート]/Drawables/ 以下に配置されたGameObjectにアタッチして使用します。
これがアタッチされたGameObjectと同じIDのアートメッシュを当たり判定に使用します。

CubismRaycastableは、そのメッシュの当たり判定の精度を設定するパラメータを持っています。

CubismRaycastable.Precisionには設定可能な値が2つあり、それぞれ以下のようになっております。

  • BoundingBox

そのメッシュを囲う、四辺が水平または垂直の矩形を当たり判定として使用します。
メッシュの形状によってはメッシュ外の座標でも当たり判定を取りますが、Trianglesと比較してパフォーマンスに優れます。

  • Triangles

メッシュの形状を当たり判定の範囲として使用します。
BoundingBoxと比較するとパフォーマンスに劣りますが、正確な範囲で判定を行うことができます。

 

 

2. 入力された座標と指定されたアートメッシュの当たり判定を行うコンポーネント

実際の当たり判定の取得はCubismRaycasterを使用します。
CubismRaycasterを使用する際はCubismのPrefabのルートにアタッチします。

CubismRaycasterの初期化時に、PrefabにアタッチされたすべてのCubismRaycastableの参照を取得します。
実行中に当たり判定用のメッシュを追加/削除した際には、CubismRaycaster.Refresh()を呼んで参照を取得し直します。

 

座標から当たり判定を取得するには、CubismRaycaster.Raycast()を利用します。

 

CubismRaycaster.Raycast()は返り値に当たり判定を取得したメッシュの数を返します。
また、引数に渡したCubismRaycastHit[]型のインスタンスに当たり判定を取得したメッシュの情報が設定されます。

CubismRaycaster.Raycast()は、同座標上に複数のメッシュが重なっていた場合、最大でCubismRaycastHit[]型のインスタンスの要素の数まで取得します。
要素数以上のメッシュが重なっていた場合、超えた分のメッシュは結果が取得されません。

CubismRaycastHitは当たり判定を取得したメッシュの情報を持つ構造体です。

  • Drawable

当たり判定を取得したアートメッシュの参照です。

  • Distance

指定した座標からの距離です。
CubismRaycaster.Raycast()の引数に渡したoriginまたはray.originとDrawableのTransform.positionの直線距離です。

  • LocalPosition

当たり判定を取得したアートメッシュのローカル座標です。

  • WorldPosition

当たり判定を取得したアートメッシュのワールド座標です。

© 2010 - 2020 Live2D Inc.