1.

Unity キャラクター作成完全ガイド (手順 + スクリプト)

編集
この記事の要点
  • Unity でキャラクターを作る方法は Primitive (Capsule) / Asset Store 既製モデル / Mixamo 等から FBX 取り込み
  • Animator Controller でアニメーション状態遷移 (Idle / Run / Jump) を制御
  • 操作は CharacterController または Rigidbody + Capsule Collider
  • カメラ追従は Cinemachine パッケージで簡単 (Free Look)
  • 入力は Input System (新) を推奨 (旧 Input Manager は非推奨)

Unity でのキャラクター作成の全体像

Unity でプレイヤーキャラクターを動かすには大きく 5 段階のステップがあります:

  1. キャラクターモデルを用意 (Primitive / Asset Store / Mixamo)
  2. Rigging / Animator 設定
  3. 移動スクリプト 作成 (CharacterController or Rigidbody)
  4. カメラ追従 設定 (Cinemachine 推奨)
  5. 入力 (キーボード / コントローラ) 接続

ステップ 1: Primitive (Capsule) で簡易キャラ

まずはプロトタイプ用の簡易キャラを作ります。Hierarchy 右クリック → 3D Object → Capsule。これだけで「人型のあたり判定」になります。

Capsule キャラクター作成

Inspector で位置を (0, 1, 0)、Rotation (0, 0, 0)、Scale (1, 1, 1)。CharacterController コンポーネントを追加すると、衝突付きの移動制御ができるようになります。

CharacterController コンポーネント追加

ステップ 2: Asset Store / Mixamo からモデル取り込み

本格的なキャラには 3D モデルを使います。無料の入手元:

サイト料金特徴
Unity Asset Store無料 / 有料Unity 公式、Standard Assets ある
Mixamo (Adobe)無料Humanoid モデル + アニメ多数。Adobe ID で誰でも使用可
Sketchfab無料 / 有料CC ライセンスの 3D モデル
TurboSquid / CGTrader有料中心商用品質

Mixamo のキャラ + アニメ FBX をダウンロードし、Unity の Assets/Models/ にドラッグ&ドロップで取り込みます。

モデルファイルの取り込み

Inspector の Rig タブで Animation Type: Humanoid を選択し Apply。これで Mecanim の Humanoid アバターとして扱えます。

Humanoid Rig 設定

ステップ 3: Animator Controller

Project → Create → Animator Controller で .controller ファイルを作り、Animator ウィンドウで State を配置:

  • Idle (待機)
  • Run (走る)
  • Jump (ジャンプ)
  • Fall (落下)

State 間に矢印 (Transition) を引き、Parameters (例: Speed / IsJumping) を作って Conditions に設定します。

Animator Controller の State 設計

キャラ GameObject に Animator コンポーネントを追加し、Controller プロパティに作成した .controller を割り当てます。

Animator コンポーネント割り当て

ステップ 4: 移動スクリプト

CharacterController を使った三人称シューターの基本移動を書きます:

using UnityEngine;

[RequireComponent(typeof(CharacterController))]
[RequireComponent(typeof(Animator))]
public class PlayerController : MonoBehaviour
{
    public float speed = 6f;
    public float jumpForce = 8f;
    public float gravity = 20f;
    public Transform cameraTransform;

    private CharacterController controller;
    private Animator animator;
    private Vector3 velocity;

    void Start()
    {
        controller = GetComponent<CharacterController>();
        animator   = GetComponent<Animator>();
        if (cameraTransform == null) cameraTransform = Camera.main.transform;
    }

    void Update()
    {
        // 入力 (旧 Input Manager)
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        // カメラ基準の移動方向
        Vector3 forward = cameraTransform.forward; forward.y = 0; forward.Normalize();
        Vector3 right   = cameraTransform.right;   right.y   = 0; right.Normalize();
        Vector3 move    = (forward * v + right * h) * speed;

        if (controller.isGrounded)
        {
            velocity.y = -1f;                                  // 接地安定
            if (Input.GetButtonDown("Jump"))
            {
                velocity.y = jumpForce;
                animator.SetTrigger("Jump");
            }
        }
        else
        {
            velocity.y -= gravity * Time.deltaTime;
        }

        Vector3 finalMove = new Vector3(move.x, velocity.y, move.z);
        controller.Move(finalMove * Time.deltaTime);

        // 移動方向に体を向ける
        if (move.sqrMagnitude > 0.1f)
            transform.rotation = Quaternion.Slerp(transform.rotation,
                Quaternion.LookRotation(move), 10f * Time.deltaTime);

        // Animator にスピードを渡す
        animator.SetFloat("Speed", move.magnitude);
    }
}

このスクリプトを Capsule (またはモデル) にアタッチし、再生すると WASD で移動・スペースでジャンプできます。

プレイヤー操作スクリプト適用後

ステップ 5: カメラ追従 (Cinemachine)

カメラを自前で書くと長くなるため、Cinemachine パッケージを利用します:

  1. Window → Package Manager → Cinemachine → Install
  2. GameObject → Cinemachine → Free Look Camera を作成
  3. Follow / Look At に Player Transform を指定
  4. マウス操作で 3 リング (Top/Mid/Bottom) を調整して三人称カメラに

Cinemachine カメラ設定

新 Input System (推奨)

Unity 2019.3 以降は Input System Package が推奨されています。コントローラ / キーボード / タッチを統一 API で扱えます。

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerControllerNew : MonoBehaviour
{
    private Vector2 moveInput;
    private bool jumpPressed;

    // PlayerInput コンポーネントから呼ばれる
    public void OnMove(InputAction.CallbackContext ctx)
    {
        moveInput = ctx.ReadValue<Vector2>();
    }

    public void OnJump(InputAction.CallbackContext ctx)
    {
        if (ctx.performed) jumpPressed = true;
    }

    void Update()
    {
        // moveInput.x, moveInput.y を使って同様に CharacterController 動かす
    }
}

サードパーソンの完成形に必要な要素

要素使うもの
移動CharacterController.Move()
ジャンプvelocity.y += jumpForce
アニメAnimator + Blend Tree (Idle-Walk-Run)
足音Animation Event + AudioSource
カメラCinemachine Free Look
当たり判定Capsule Collider + Layer Mask
HP / UIUI Toolkit / Canvas + Slider

FAQ

Q: CharacterController と Rigidbody はどちらが良い
A: スタンダードな三人称キャラなら CharacterController が簡単。物理演算ベース (アクションパズル等) なら Rigidbody。両方を併用するのは衝突制御が複雑になるため避けましょう。

Q: Animator の State が遷移しない
A: Conditions と Has Exit Time の組み合わせを確認。即時遷移したいなら Has Exit Time を OFF にします。

Q: Mixamo のアニメで Root Motion が無い
A: Inspector → Animation タブで Root Transform Position (XZ): Bake Into Pose を解除。Animator で Apply Root Motion を ON にします。

編集
Post Share
子ページ

子ページはありません

同階層のページ

同階層のページはありません

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