モデルの当たり判定

Live2Dには当たり判定を行う機能はありません。
ただし、ポリゴンの頂点情報を取得できるので外部で当たり判定を行うことができます。



頂点のインデックスが必要な場合は基本的にはModeler上で確認する必要があります。
上記URLの「頂点のインデックスの確認方法」を参考にしてください。
プログラム上で取得する場合はこちらを参考にしてください。

当たり判定を行うにはALive2DModelクラスのgetTransformedPoints関数を使用します。
これは指定した描画データの頂点を取得する関数です。
取得できない場合にはNULLを返します。第二引数で頂点数を取得します。

頂点の並びかたはプラットフォームごとに異なることがあります。
DEF::VERTEX_OFFSETに点列のうちのxの始まるオフセットの値が格納されています。
DEF::VERTEX_STEPに1点に含まれる点の数が格納されています。
一般的には以下の形式で取得できます。

[x1,y1,x2,y2...]

この場合
DEF::VERTEX_OFFSETは0で、
DEF::VERTEX_STEPはxとyの2つなので2です。


また、使用前にupdate関数を1回以上呼んでください。


頂点の取得例
int pointCount = 0 ;
int drawIndex = live2DModel->getDrawDataIndex("D_REF.HEAD") ;//Modelerで設定したID
float* points = live2DModel->getTransformedPoints( drawIndex , &pointCount ) ;

if( ! points )return;//取得失敗。IDの間違い、書き出し設定のミスなどが考えられる

//live2d::DEF は DEF.h に記載
int offset = live2d::DEF::VERTEX_OFFSET ;//点列のうちの x のはじまるoffset
int step = live2d::DEF::VERTEX_STEP ; //1点に含まれる点の数

for( int i = 0 ; i < pointCount ; i++ )
{
    int xi = i*step + offset   ;
    int yi = i*step + offset+1 ;
    printf("%5.1f ,%5.1f  " , points[xi], points[yi]) ;
}



サブページ (1): 頂点インデックスの取得
Comments