★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。

新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
Live2D公式クリエイターズフォーラム

なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
オプション

頂点数を取得したい

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

コメント

  • オプション
    編集済: 12月 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()
    あたりがその処理ですので参考にしてください。

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