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

ラグドール(Ragdoll)でキャラをぐったりさせた例 ゲーム制作メモ

UnityでFPS用のシステムを作っていて、倒した敵をぐったりさせてみたかったので「ラグドール(Ragdoll)」という機能を使ってみることにしました。

スポンサーリンク

ラグドール(Ragdoll)って何?

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

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

ラグドールの設定方法

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

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

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

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

ラグドールウィザード

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

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

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

アセットを使う方法

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

Ragdoll helper

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

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

メカニムからラグドールに切り替える方法

最後に、キャラクターを普通の状態からラグドールに切り替えるための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);
  }
}

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

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

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

実際に動かしてみると下の動画のようになります。

メカニムからラグドールに切り替えた様子

(動いていない場合はクリックで再生)

これで無事キャラクターをぐったりさせることができました。