【Unity】敵をラグドールに切り替える

投稿者: | 2020-07-05
(音量注意)

HPが0以下になった敵をラグドールに切り替えます。

まず敵のラグドールを作るために敵を複製して、アニメーターやナビメッシュエージェントなどのコンポーネントを削除して、オーディオソースコンポーネントだけを残しました。

これをラグドールにしますが、Unityの純正のツールで作るとどうしてもメッシュが伸びたりしてしまったので、自分で敵のボーンにコライダーやジョイントを付けてみるとうまくいきました。

×

まず、敵のボーン全てにコライダーとリジッドボディをつけて、マスターボーン以外にはCharacter Jointもつけます。そして、各ボーンのCharacter JointコンポーネントのConnected Bodyに隣のボーンをアタッチしていきます。

下の画像の場合、「Hip」のボーンにつけたCharacter JointのConnected Bodyには「Master」のボーンをアタッチし、「Spine」には「Hip」をアタッチします。

「Hip」のもう2つの子ボーンである「UpperLeg_L」と「UpperLeg_R」にも「Hip」をアタッチします。これを手足の先のボーンまで続けます。ジョイントの他の設定は全く変えていません。

あとは、コライダーの大きさや位置を調節しました。するとメッシュが破れたりせずに安定しました。

そして、敵のスクリプトで、攻撃されて減らした後のHPが0以下なら敵を破壊してラグドールと置き換えます。その時にラグドールのオーディオソースを使って叫び声を再生します。

public void SetHP(float f)
{
    if (animator.GetCurrentAnimatorStateInfo(0).IsName("Flinch")) return;

    HP += f;
    HP = Mathf.Clamp(HP,0f,1f);
    HpImage.fillAmount = HP;
        
    if (HP > 0f)
    {
        Flinch();

    }
    // 体力が0になったとき
    else
    {
        Destroy(gameObject);
        var r = Instantiate(ragdoll, transform.position, transform.rotation);
        AudioSource a = r.GetComponent();
        a.clip = audios[3];
        a.Play();
    }
}

これでHPが0になった敵が倒れるようになりました。

次は倒れ方をもう少しリアルにしてみます。

コメントを残す

メールアドレスが公開されることはありません。