★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
頂点数を取得したい
現在UnityでLive2Dを使っています。
モデルに当たり判定をつけて、その判定ごとにモーションを変えたいです。
Modelerで判定用のポリゴンの配置はしました。
言語はc#でプログラムで取得しようとしています。
マニュアルを参考に書いていますが、getTransformedPoints関数の第二引数が無いらしくて頂点数取得出来ません。
他に頂点数を取得出来る方法があったらお願いします。
モデルに当たり判定をつけて、その判定ごとにモーションを変えたいです。
Modelerで判定用のポリゴンの配置はしました。
言語はc#でプログラムで取得しようとしています。
マニュアルを参考に書いていますが、getTransformedPoints関数の第二引数が無いらしくて頂点数取得出来ません。
他に頂点数を取得出来る方法があったらお願いします。
0
コメント
こちらを利用するというのはいかがでしょうか。
HitTest()関数の一つ目の引数は、モデルに配置された当たり判定用の描画オブジェクトのID(Modelerのパーツパレット、または編集パレットにある「ID」で確認できる文字列)を渡します。
HitTest()関数を使うとなると、LAppModelクラス定義が必要になりますよね。
その場合LAppModelの初期値はどうしたらいいでしょうか?
UnityでLive2Dを使うのは初めてなもので、何もわからないもので…
マニュアルのチュートリアルでとりあえずの実装は可能ですが、SampleApp1にはLive2Dを扱う機能がひと通り揃っております。(Unityに限らず、どのプラットフォームのSDKでもその点は共通です)
HitTestの使い方もここで説明するより、SampleApp1のプロジェクト自体を利用したほうが早いかと思います。
注意点として、モデル設定用JSON(サンプルで言う、[モデル名].model.jsonという名前のファイル)を用意して頂く必要があります。
その中に当たり判定用の描画オブジェクトのIDを設定しておけば、HitTest()関数でそれを使って当たり判定の結果を返してくれます。
モデル設定用JSONは、Live2D Viewerで作成することが出来ますが、わからなければまたこちらまで。
配列の要素数は戻り値の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];
}
のなかの
hitTestSimple()
getSimpleRect()
あたりがその処理ですので参考にしてください。