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

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

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

【質問】当たり判定の沢山あるものを作りたい

Unity SampleApp1を元に当たり判定を複数追加、それらにモーションを割り当てたいのですが
具体的に、どこをいじると良いのでしょうか?

最初はmodel.json内をいじると良いのかな?と新しいhit_areasやtap_ を書き足したり
LAppDefine LAppMode内などもいじるのかな?とそれっぽい個所をコピペーしてbody2みたいに書き直したり
SampleApp1と色々にらめっこしていたのですが、プログラムとかあまり理解できてないのでこんがらがるだけでした(^^;

image

コメント

  • tailtalesさん

    一番シンプルな方法だと以下のやり方でできます。
    1)モデルの当たり判定を増やす

    2)model.jsonの当たり判定を増やす
    "hit_areas":
    [
        {"name":"head0", "id":"D_REF.HEAD0"},
        {"name":"head1", "id":"D_REF.HEAD1"},
        {"name":"body", "id":"D_REF.BODY"}
    ],
    
    3)LAppDefine.csの当たり判定の定義を増やす
    	// 外部定義ファイル(json)と合わせる
    //	public const string HIT_AREA_HEAD		    ="head";
        public const string HIT_AREA_HEAD0               ="head0";
        public const string HIT_AREA_HEAD1               ="head1";
        public const string HIT_AREA_BODY		    ="body";
    
    4)LAppModel.csの修正
    public void FlickEvent(float x, float y)
    {
        if (LAppDefine.DEBUG_LOG) Debug.Log("flick x:" + x + " y:" + y);
    
    //        if (HitTest(LAppDefine.HIT_AREA_HEAD, x, y))
        if (HitTest(LAppDefine.HIT_AREA_HEAD0, x, y))
        {
            if (LAppDefine.DEBUG_LOG) Debug.Log("Flick face");
            StartRandomMotion(LAppDefine.MOTION_GROUP_FLICK_HEAD, LAppDefine.PRIORITY_NORMAL);
        }
        if (HitTest(LAppDefine.HIT_AREA_HEAD1, x, y))
        {
            if (LAppDefine.DEBUG_LOG) Debug.Log("Flick face");
            StartRandomMotion(LAppDefine.MOTION_GROUP_FLICK_HEAD, LAppDefine.PRIORITY_NORMAL);
        }
    }
    
    public bool TapEvent(float x, float y)
    {
        if (LAppDefine.DEBUG_LOG) Debug.Log("tapEvent view x:" + x + " y:" + y);
    
    //        if (HitTest(LAppDefine.HIT_AREA_HEAD, x, y))
        if (HitTest(LAppDefine.HIT_AREA_HEAD0, x, y))
        {
            // 顔をタップしたら表情切り替え
            if (LAppDefine.DEBUG_LOG) Debug.Log("Tapped face");
            SetRandomExpression();
        }
        else if (HitTest(LAppDefine.HIT_AREA_HEAD1, x, y))
        {
            // 顔をタップしたら表情切り替え
            if (LAppDefine.DEBUG_LOG) Debug.Log("Tapped face");
            SetRandomExpression();
        }
    
    StartRandomMotionの引数1は、再生するモーションを指します。
    model.jsonの"flick_head"で再生するモーション名を設定すれば、指定のモーションが再生できるかと思います。
  • ありがとうございます。確認しながら一つ一つやってみます。
コメントするにはサインインまたは登録して下さい。