【Unity】ラグドール(Ragdoll)でキャラクターをぐったりさせる方法

Ragdollでぐったりさせてみよう ゲーム開発

Unityで3Dゲームを作っていると、倒した敵をぐったりさせてみたくなることがあります。そのようなときに便利なのが「ラグドール(Ragdoll)」という機能です。

ここではそのラグドールの設定方法について書いていきますね。

ラグドール(Ragdoll)とは?

まずはじめに、そもそも「ラグドールって何?」という話ですが…ラグドールは簡単に言うと「キャラクターをぐったりさせるための物理演算」のことです。

ラグドールを使えば、キャラクターが気絶したり死亡したりしたときの「ぐったりした感じ」を表現できます(下のGIF参照)。

Animatorからラグドールに切り替えた様子

(画像クリックでGIF再生)

ラグドールの設定方法

では、次にラグドールを設定する方法を紹介します。やり方としては次の2つの方法があります。

  1. ラグドールウィザードを使う
  2. アセットを使う

ラグドールウィザードを使う方法

一つ目はUnity標準の「ラグドールウィザード」という機能を使う方法です。ヒエラルキーで右クリック→「3Dオブジェクト」→「ラグドール」を選択すると、下の図のようなラグドールウィザードが出てくるのでそこに3Dモデルのパーツを設定します。

ラグドールウィザード

…えーっと、公式マニュアルを見ると

ウィザードへのパーツ追加は簡単な作業です。キャラクターインスタンスのそれぞれの異なる Transform をウィザードの適切なプロパティーの上にドラッグします。これはキャラクターを自ら作成していれば簡単な作業です。

って書いてあるんですけど、ハッキリ言って超面倒くさいです。だってウィザードのどの欄にどのゲームオブジェクトが対応するのかパッと見分からないんだもん。なので1体や2体ならまだしも、コレを使って何体もラグドールを設定するのはやりたくないですね。

アセットを使う方法

というわけで、アセットストアに便利なアセットないかな~?と思って見てみるとありました。「Ragdoll helper」という無料アセットです。

これを使えば一発でラグドールを設定できます。

使い方は簡単で、メニューバーの「ウィンドウ」→「BzSoft」→「Ragdoll Helper」からウィンドウを開いて、ラグドールを設定したいゲームオブジェクトを選んで「Create」を押すだけです。これならラグドールを楽々設定できますね。

Animatorからラグドールに切り替える方法

最後に、キャラクターをAnimatorで制御する状態からラグドールに切り替えるためのC#スクリプトを書いてみましょう。今回はサンプルとして次のようなスクリプトを作ってみました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(Animator))]
public class RagdollController : MonoBehaviour
{

  Animator animator;
  Rigidbody[] ragdollRigidbodies;

    void Start()
    {
    animator = GetComponent<Animator>();
    ragdollRigidbodies = GetComponentsInChildren<Rigidbody>();

    StartCoroutine(Test());
    }

    void SetRagdoll(bool isEnabled)
  {
    foreach (Rigidbody rigidbody in ragdollRigidbodies)
    {
      rigidbody.isKinematic = !isEnabled;
      animator.enabled = !isEnabled;
    }
  }

  IEnumerator Test()
  {
    SetRagdoll(false);

    yield return new WaitForSeconds(3);

    SetRagdoll(true);
  }
}

このC#スクリプトでやっていることは簡単です。最初にキャラクターの子のリジッドボディを全部取得しておいて、そのリジッドボディに対して

  • Animatorを使いたい場合→Rigidbody.isKinematicとAnimatorをON
  • ラグドールに切り替えたい場合→Rigidbody.isKinematicとAnimatorをOFF

という風にしているだけです。

おわりに

以上、簡単ではありますがUnityでのラグドールの設定方法についてご説明しました。ラグドールを使うとキャラクターの気絶・死亡演出がよりリアルになるので、今回の内容を参考にしてぜひゲームに導入してみてください。

この記事がゲーム開発のお役に立てば幸いです。