3.

Unity キャラクター作成完全ガイド|Capsule から Mixamo・Cinemachine・Input System まで

編集
この記事の要点
  • Unity でのキャラクターは Hierarchy → 3D Object → Capsule で手早く作れる仮形が出発点。本格的には Asset Store / Mixamo から人型モデルを持ち込む
  • 人型モデルは Humanoid Rig に設定すると Mecanim でアニメーション共有が可能。Animator Controller で状態遷移を定義
  • 物理移動の選択肢は 2 つ: Character Controller (CapsuleCollider 付き) = 手軽 / Rigidbody = 物理エンジンに従う本格派
  • カメラ追従は Cinemachine の Virtual Camera + Body=Follow + Aim=POV で 3rd Person カメラが数分で組める
  • 入力は Input System (新) 推奨。InputAction で WASD / ゲームパッド / スマホ入力を 1 箇所に集約

Unity のキャラクターオブジェクト

Unity 上で「キャラクター」と呼べるものは、ヒエラルキー上の GameObject に 3D モデル + 当たり判定 + アニメーション + 入力処理 + カメラが組み合わさったものです。完成度はピンキリで、Cube に Rigidbody だけ付ければ最低限の「キャラ」として動かせます。

Unity でのキャラクターオブジェクト構成例

最速で動くキャラ: Capsule

動作確認用の雛形には Unity 標準の Capsule が便利です。

  1. Hierarchy で右クリック → 3D Object → Capsule
  2. Inspector で Add Component → Character Controller
  3. その下に Camera を子オブジェクトとして配置 (1 人称視点)
  4. 下記の最小スクリプトを追加
using UnityEngine;

[RequireComponent(typeof(CharacterController))]
public class SimpleMover : MonoBehaviour
{
    public float speed = 5f;
    public float jumpSpeed = 5f;
    public float gravity = -9.81f;

    CharacterController cc;
    Vector3 velocity;

    void Awake() => cc = GetComponent<CharacterController>();

    void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        Vector3 move = transform.right * h + transform.forward * v;
        cc.Move(move * speed * Time.deltaTime);

        if (cc.isGrounded)
        {
            velocity.y = -1f;
            if (Input.GetButtonDown("Jump")) velocity.y = jumpSpeed;
        }
        velocity.y += gravity * Time.deltaTime;
        cc.Move(velocity * Time.deltaTime);
    }
}

このまま Play すれば WASD で移動、Space でジャンプができます。本格キャラに置き換えるのは見た目だけなので、まず動かして遊びを確認するのがおすすめ。

本格的なキャラを持ち込む: Asset Store / Mixamo

入手元特徴料金
Unity Asset Storeキャラ + アニメ + スクリプトのパック多数。Synty Studios の低ポリ系が人気無料〜数十ドル
Mixamo (Adobe)★ 人型キャラ + 2,500 個以上のモーションが無料、FBX エクスポート無料
ReadyPlayerMeWeb カスタマイザでアバター生成、glTF/FBX無料
Blender / VRoid Studio で自作完全自由、商用利用も OK (要利用規約確認)無料
Sketchfab3D モデル共有サイト。CC ライセンス品多数無料〜

Mixamo からの導入手順

  1. mixamo.com に Adobe アカウントでサインイン
  2. Characters タブで好きなキャラを選択 → Download (FBX for Unity)
  3. Animations タブで Idle / Walk / Run / Jump を選び、それぞれ Download (Without Skin)
  4. Unity の Assets フォルダにドラッグ&ドロップ
  5. Model FBX 選択 → Inspector → Rig → Animation Type = Humanoid → Apply
  6. 各 Animation FBX も同様に Humanoid 化、Loop が必要なものは Loop Time にチェック

Humanoid Rig と Animator Controller

Humanoid Rig は、Unity 標準の汎用人型ボーン構造です。Mixamo / Asset Store のモデルとアニメーションは Humanoid 同士なら自由に組み合わせ可能 (Mecanim Retargeting)。

アニメーションを切り替えるには Animator Controller を作成し、ステートマシン (Idle ↔ Walk ↔ Run ↔ Jump) を組みます。

using UnityEngine;

public class PlayerAnimator : MonoBehaviour
{
    Animator anim;
    CharacterController cc;
    public float speed = 4f;

    void Awake()
    {
        anim = GetComponent<Animator>();
        cc = GetComponent<CharacterController>();
    }

    void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        Vector3 input = new Vector3(h, 0, v);
        float magnitude = Mathf.Clamp01(input.magnitude);

        // Animator パラメータに渡す (Blend Tree で Idle ↔ Walk ↔ Run)
        anim.SetFloat("Speed", magnitude);

        if (input.sqrMagnitude > 0.01f)
        {
            Quaternion target = Quaternion.LookRotation(input);
            transform.rotation = Quaternion.Slerp(transform.rotation, target, 10f * Time.deltaTime);
            cc.SimpleMove(transform.forward * magnitude * speed);
        }
        else
        {
            cc.SimpleMove(Vector3.zero);
        }
    }
}

Character Controller vs Rigidbody

項目Character ControllerRigidbody
物理エンジン使わない (自前で重力)★ Unity 物理に従う
移動 APIcc.Move() / cc.SimpleMove()rb.AddForce() / rb.MovePosition()
挙動の制御性★ 思い通りに動く物理任せ、押されて動く
段差・スロープ処理専用パラメータ (Step Offset / Slope Limit)形状次第、追加実装必要
他オブジェクトとの相互作用弱い (押せない)★ 強い (押す/押される)
典型用途FPS / TPS 主人公、プラットフォーマー樽が転がる、ボールがバウンド、車

Rigidbody バージョン

using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class RbMover : MonoBehaviour
{
    public float speed = 4f;
    Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
        rb.freezeRotation = true;   // キャラが転倒しないように
    }

    void FixedUpdate()   // 物理は必ず FixedUpdate
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        Vector3 input = transform.right * h + transform.forward * v;
        Vector3 vel = input * speed;
        vel.y = rb.linearVelocity.y;   // Unity 6+ 命名
        rb.linearVelocity = vel;
    }
}

Cinemachine で 3rd Person カメラ

Unity 公式の Cinemachine パッケージは、カメラ追従の煩雑な計算を全部肩代わりしてくれます。

  1. Window → Package Manager → Cinemachine を Install
  2. Hierarchy → Create → Cinemachine → Virtual Camera
  3. Inspector で Follow にプレイヤー Transform、Look At も同じく
  4. Body = 3rd Person Follow、Aim = POV or Composer
  5. Damping を調整して追従の柔らかさを設定

Cinemachine Brain (MainCamera に自動付与) が複数の Virtual Camera をブレンドしてくれるので、ボスバトル時だけカメラを引き、装備変更時はクローズアップ、といった演出も簡単。

Input System (新入力システム)

Unity の旧 Input.GetAxis() は便利ですが、ゲームパッド / VR / モバイルが絡むと限界です。Input System パッケージに置き換えると整理されます。

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerInput : MonoBehaviour
{
    InputAction moveAction;
    InputAction jumpAction;

    void Awake()
    {
        moveAction = InputSystem.actions.FindAction("Move");
        jumpAction = InputSystem.actions.FindAction("Jump");
    }

    void Update()
    {
        Vector2 move = moveAction.ReadValue<Vector2>();
        // move.x : 左右, move.y : 前後
        // WASD / 左スティック / モバイルパッド すべて同じ値で取れる

        if (jumpAction.WasPressedThisFrame())
        {
            // ジャンプ処理
        }
    }
}

Starter Asset: Third Person Controller

Unity が公式無料配布している Starter Assets - Third Person Character Controller (Package Manager → My Assets) を導入すれば、Cinemachine + Input System + Animator + Mover が組み込み済みのキャラが即動きます。学習にも本番にも有効。

キャラに付ける付随コンポーネント

コンポーネント役割
Capsule Collider当たり判定 (Character Controller 利用時は内蔵)
Animatorアニメーション制御
Audio Source足音・声・SE 再生
NavMesh AgentNavMesh 上の自動経路移動 (NPC 用)
AI Behavior Tree敵 AI の意思決定 (Behavior Designer 等)
Photon View / Network Identityマルチプレイヤー同期
Health / Stats ScriptHP / MP / 経験値などのゲーム固有データ

パフォーマンス Tips

  • 大量に湧かす雑魚キャラは SkinnedMeshRenderer よりも MeshRenderer + GPU Skinning OFF で軽量化
  • LOD (Level Of Detail) Group で遠距離キャラを低ポリ化
  • NavMesh エージェントは Avoidance Priority で衝突回避コストを調整
  • 大規模 RTS なら ECS / DOTS によるエンティティ管理を検討

FAQ

Q: キャラが床をすり抜ける
A: Collider 形状が小さい / Mesh Collider に Convex 必要 / Rigidbody の Collision Detection = Continuous 設定で改善。CharacterController の場合は Step Offset 過大が原因。

Q: アニメーションがブレンドせずカクつく
A: Animator Controller の Transition で Has Exit Time をオフ + Transition Duration を 0.1〜0.25s に。

Q: 同じ Animator Controller を別キャラで使い回したい
A: 元の Controller を右クリック → Animator Override Controller を作成し、内部のクリップだけ差し替えれば共有可能です。

Q: モバイル用の仮想スティックは?
A: Unity UI の OnScreenStick (Input System 付属) コンポーネントを Canvas に置くだけで「ゲームパッド左スティック」として認識されます。

編集
Post Share
子ページ
  1. キャラクターの作成
同階層のページ
  1. オブジェクトの追加方法
  2. 地形
  3. キャラクター
  4. カメラ

最近更新/作成されたページ