頂点数を取得したい

現在UnityでLive2Dを使っています。
モデルに当たり判定をつけて、その判定ごとにモーションを変えたいです。
Modelerで判定用のポリゴンの配置はしました。
言語はc#でプログラムで取得しようとしています。
マニュアルを参考に書いていますが、getTransformedPoints関数の第二引数が無いらしくて頂点数取得出来ません。
他に頂点数を取得出来る方法があったらお願いします。

コメント

  • 編集済: December 2014
    頂点数というより当たり判定ということであれば、SDKの\sample\SampleApp1\Assets\Scripts\sample\LAppModel.cs内のHitTest()関数がまさに当たり判定のチェックを行っている関数です。
    こちらを利用するというのはいかがでしょうか。

    HitTest()関数の一つ目の引数は、モデルに配置された当たり判定用の描画オブジェクトのID(Modelerのパーツパレット、または編集パレットにある「ID」で確認できる文字列)を渡します。

  • お返事ありがとうございます。
    HitTest()関数を使うとなると、LAppModelクラス定義が必要になりますよね。
    その場合LAppModelの初期値はどうしたらいいでしょうか?
    UnityでLive2Dを使うのは初めてなもので、何もわからないもので…
  • 一度、SampleApp1のプロジェクトを使ってみてください。
    マニュアルのチュートリアルでとりあえずの実装は可能ですが、SampleApp1にはLive2Dを扱う機能がひと通り揃っております。(Unityに限らず、どのプラットフォームのSDKでもその点は共通です)
    HitTestの使い方もここで説明するより、SampleApp1のプロジェクト自体を利用したほうが早いかと思います。

    注意点として、モデル設定用JSON(サンプルで言う、[モデル名].model.jsonという名前のファイル)を用意して頂く必要があります。
    その中に当たり判定用の描画オブジェクトのIDを設定しておけば、HitTest()関数でそれを使って当たり判定の結果を返してくれます。

    モデル設定用JSONは、Live2D Viewerで作成することが出来ますが、わからなければまたこちらまで。
  • getTransformedPointsについてですけど、C#では第二引数は無視して良いはずです。
    配列の要素数は戻り値のLengthから取れますし、頂点数はそれを2で割った数です。(x1,y1,x2,y2のような配列なので)

    //マニュアルに書いてあるコード
    //C++は配列自体に要素数の情報を持たないので、第二引数で頂点数を受け取るための変数を渡してます。

    float* points=live2DModel->getTransformedPoints(drawIndex,&pointCount);
    for (int i = 0; i < pointCount; i++)
    {
    float x = points[DEF::VERTEX_OFFSET+i*DEF::VERTEX_STEP];
    float y = points[DEF::VERTEX_OFFSET+i*DEF::VERTEX_STEP+1];
    }

    //C#での同等のコード
    float[] points = live2DModel.getTransformedPoints(drawIndex);
    for (int i = 0; i < points.Length; i =i + 2) {
    float x = points[i];
    float y = points[i + 1];
    }

  • Live2DSDK/sample/SampleApp1/Assets/Live2D/framework/L2DBaseModel.cs
    のなかの
    hitTestSimple()
    getSimpleRect()
    あたりがその処理ですので参考にしてください。

コメントするにはサインインまたは登録して下さい。