U
タブ 02キャラクターと戦闘9 レッスン — タップで開く
01 / 09 · 9 分
キャラクターと戦闘

キャラクターを作る

ここまでのプロジェクト

Assets/

Scenes/

Arena.unity

KnightMageArcherCharacterControllerCameraTarget

Scripts/

SimpleMover.csCharacterSwitcher.csCharacterStats.cs

Prefabs/

Knight prefab

Models/

Knight model (FBX)

すでにあるものこのレッスンで追加

tab 01 の Arena.unity を開いてください。床には 3 つのカプセル——Knight、Mage、Archer——が立っていて、キー 1 / 2 / 3 で切り替えます。この tab の作業はすべて Knight に対して行います。

Mage と Archer は最後までカプセルのままです。あえて残しています:各レッスンの終わりにキー 2 を押せば、カプセルと並べて、Knight がどれほど進化したかすぐに分かります。

ゲームのキャラクターは、1 つの GameObject に重なる 4 層です:見た目となるモデル、動き付けるリグ、クリップを選ぶ Animator、そして世界とぶつかるコライダー。

アニメーション図

モデル、リグ、Animator、コントローラー——この 4 つが揃って初めてキャラクターは歩けます。

キャラクターの入手先

  • Mixamo(無料、Adobe アカウントが必要):キャラクターを選び、アニメーションを選び、FBX でダウンロード。最も速いスタート方法です。

  • Unity Asset Store:「free character」で検索し、価格 0 で絞り込みます。

  • あるいは tab 01 の Knight カプセルをそのまま使う手も——以降のスクリプトはすべてカプセルでも動き、モデルは後から入れられます。

重要なインポート設定

  1. 1

    .fbx を Assets/Models にドラッグし、選んで Rig tab を開きます。

  2. 2

    Animation Type を Humanoid にして Apply を押します。これでモデルのボーンが Unity の標準スケルトンに割り当てられます。

  3. 3

    Humanoid であれば、どの Mixamo アニメーションもどの Mixamo キャラクターにでも使えます——クリップを相互に流用できます。

  4. 4

    Materials tab で Extract Textures / Extract Materials を選べば、後から編集できます。

キャラクターオブジェクトを組み立てる

  1. 1

    Hierarchy で Knight を選び、カプセルの MeshFilter、MeshRenderer、Capsule Collider を削除します——後の Character Controller がコライダーの役目を兼ねます——GameObject と名前はそのまま残してください。

  2. 2

    モデルを Knight の子としてローカル位置 0, 0, 0 にドラッグします。親は名前もスクリプトもスイッチャーのリスト内の位置もそのまま保ちます。

  3. 3

    Knight そのものに Component▸Physics▸Character Controller を追加します。

  4. 4

    Height 1.8、Radius 0.3、Center Y 0.9 に設定し、カプセルが足を Y = 0 に保ったまま体をすっぽり包むようにします。その後 Knight の Position Y を 0 に戻します——体を持ち上げるのは transform ではなくコライダーになります。

  5. 5

    Y = 1.5 の位置に空の子オブジェクト CameraTarget を作成します——カメラは足ではなくここを狙います。tab 03 で必要になります。

  6. 6

    最後に Knight を Assets/Prefabs にドラッグします。これで Knight はプレハブ——このシーンのオブジェクトであるだけでなく、独立したファイルとして保存されます。

CharacterController と Rigidbody、どちらを使う?

✓ CharacterController

操作が直接的で予測しやすく、物理と押し合いになることもありません。三人称視点のゲームのほぼすべてがこれを使っています。

✓ Rigidbody

本物の物理:力、反発、ラグドール。木箱には最適ですが、プレイヤーキャラクターには扱いにくいです。

今後につながるステータスコンポーネント

CharacterStats.cs — attach to Knight, and later to every enemy
using UnityEngine;

public class CharacterStats : MonoBehaviour
{
    [Header("Base")]
    public float maxHealth = 100f;
    public float attack = 20f;
    public float defense = 10f;
    public float moveSpeed = 5f;

    [Header("Runtime")]
    public float currentHealth;

    public bool IsAlive => currentHealth > 0f;

    void Awake()
    {
        currentHealth = maxHealth;
    }

    public void TakeDamage(float rawDamage)
    {
        if (!IsAlive) return;

        float reduced = Mathf.Max(1f, rawDamage - defense);   // always at least 1
        currentHealth = Mathf.Max(0f, currentHealth - reduced);

        if (!IsAlive) Die();
    }

    void Die()
    {
        Debug.Log(name + " died");
        // animator.SetTrigger("Die");   next lesson
    }
}