この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:T
更新日時:2026-06-11 07:07:02

タイトル: しゃがむ動作を導入する方法
SEOタイトル: UE5 でしゃがむ動作を実装 | Character Movement Crouch / Enhanced Input / アニメ連携

この記事の要点
  • UE5 の Character クラスCrouch / UnCrouch がデフォルトで用意されている
  • 使うには Character Movement → Can Crouch にチェック、Crouched Half Height でしゃがみ時のカプセル高を指定
  • 入力は Enhanced InputInput Action (IA_Crouch) + Input Mapping ContextCtrl キーをバインドするのが定番
  • アニメーション側は Animation BlueprintIsCrouching 変数を見て State Machine を分岐させる
  • カプセル Collision も自動更新されるが、Mesh の Z 位置を Crouch 時に補正しないと足が地面にめり込む点に注意

UE5 で「しゃがむ」を実装する全体像

Unreal Engine 5 では Character クラスが標準でしゃがみ(Crouch)機能を持っています。実装するには以下の 4 ステップに分けて考えると整理しやすいです。

  1. Character Movement に Can Crouch 設定を入れる
  2. Enhanced Input でしゃがみ用の入力アクションを作る
  3. Character Blueprint で Crouch / UnCrouch ノードを呼ぶ
  4. Animation Blueprint で しゃがみアニメに切替

ステップ1: Character Movement の設定

Character Blueprint を開き、Character Movement (CharMoveComp) コンポーネントを選択して以下を設定します。

項目値の目安役割
Movement Component (General Settings) → Can Crouch★ チェック ONこれが無いと Crouch ノード呼んでも何も起きない
Walking → Max Walk Speed600立ち時の速度
Walking → Max Walk Speed Crouched300しゃがみ時の速度
Character Movement (Crouching) → Crouched Half Height44★ しゃがみ時のカプセル半分の高さ
Default Capsule Half Height (CapsuleComponent 側)88立ち時のカプセル半分の高さ

Crouched Half Height はデフォルト 40 ですが、後述のキャラ Mesh と合わせて40〜50 のあたりに調整するとちょうど良いケースが多いです。

ステップ2: Enhanced Input で入力アクション作成

UE5.1 以降は Enhanced Input System が標準で、旧 Input Action / Axis よりも柔軟な設計になっています。

Input Action (IA_Crouch) を作る

  1. Content Browser で右クリック → Input → Input Action を作成 → IA_Crouch と命名
  2. 開いて Value Type = Digital (bool)Triggers = Pressed / Released で切替式に
  3. あるいはトグル式にしたい場合は Started のみで Blueprint 側でフラグ反転

Input Mapping Context (IMC_Default) に追加

  1. 既存の IMC_Default を開く(無ければ Input Mapping Context を新規作成)
  2. Mappings に + → IA_Crouch を選択
  3. キーバインドに Left Ctrl(PC)、Gamepad Left Thumbstick Button(パッド)等を割当

ステップ3: Character Blueprint で Crouch / UnCrouch を呼ぶ

Character Blueprint の Event Graph に以下のノードを並べます。

Event BeginPlay
  ↓
Cast to PlayerController (Get Player Controller)
  ↓
Get Enhanced Input Local Player Subsystem
  ↓
Add Mapping Context (IMC_Default, Priority=0)

----

Enhanced Input Action IA_Crouch [Started]
  ↓
Branch (IsCrouched?)
  - False → Crouch (Target: Self)
  - True  → UnCrouch (Target: Self)

# または「押している間だけしゃがむ」式
Enhanced Input Action IA_Crouch [Triggered] → Crouch
Enhanced Input Action IA_Crouch [Completed] → UnCrouch

Crouch / UnCrouch ノードは Character クラス組み込みのため、Cast 不要で Target = self のまま呼べます。Can Crouch を ON にしていれば、これだけでカプセルの高さが切り替わります。

ステップ4: Animation Blueprint で見た目を切替

カプセルの高さが変わっただけだとキャラの Mesh は立ったままです。アニメ側で IsCrouching 変数を持たせて State Machine を分岐させます。

AnimBP の変数準備

  1. AnimBP の Event Graph で Try Get Pawn Owner → Cast to BP_Character
  2. Cast の戻り値 → Get CharacterMovementIs Crouching → 変数 bIsCrouching に Set
  3. State Machine 内に Idle / Walk / Crouch_Idle / Crouch_Walk ステートを作成
  4. 遷移条件: bIsCrouching == true / bIsCrouching == false
// C++ で書く場合
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* InputComp)
{
    Super::SetupPlayerInputComponent(InputComp);
    if (auto* EIC = Cast(InputComp))
    {
        EIC->BindAction(IA_Crouch, ETriggerEvent::Started,   this, &AMyCharacter::StartCrouch);
        EIC->BindAction(IA_Crouch, ETriggerEvent::Completed, this, &AMyCharacter::StopCrouch);
    }
}

void AMyCharacter::StartCrouch()
{
    if (GetCharacterMovement()->IsMovingOnGround())
    {
        Crouch();   // 内部で bIsCrouched = true
    }
}

void AMyCharacter::StopCrouch()
{
    UnCrouch();
}

Mesh の Z オフセット補正

カプセルが縮んでも Mesh の原点は変わらないため、しゃがみアニメによっては足が地面にめり込む / 浮くことがあります。次のいずれかで補正します。

  • 方法A: Mesh の Z 位置を、Character Blueprint で Crouch 開始時に +44(差分)持ち上げる
  • 方法B: アニメのルートボーンを最初から地面にぴったり合わせて作る(推奨)
  • 方法C: FloatingPawnMovement / Use Controller Rotation など他コンポーネントと連携が必要なケースは UpdatedComponent も確認
# Blueprint での Z 補正例
Crouch 直後:
  Get Mesh → Set Relative Location (Z += CrouchedHalfHeight - DefaultHalfHeight)

UnCrouch 直後:
  Get Mesh → Set Relative Location (Z = 元の値)

または OnStartCrouch / OnEndCrouch イベント(Character 標準)でフックする
- OnStartCrouch (HalfHeightAdjust, ScaledHalfHeightAdjust)
- OnEndCrouch (HalfHeightAdjust, ScaledHalfHeightAdjust)

立ち上がれない場所での挙動

Character Movement には 「頭上に天井がある時は UnCrouch しない」 仕組みが入っています。具体的には CanUncrouch が呼ばれ、頭上のカプセル拡張先に衝突があれば立ち上がりを抑制します。プレイヤーが Ctrl を離しても自動で立たない場合は、頭上のコリジョンが原因のことが多いです。

Aim 系・カメラとの連携

  • Camera は SpringArm の Target Offset を Crouch 時に下げると自然
  • OnStartCrouch / OnEndCrouch をオーバーライドし、SpringArm Z を Lerp で滑らかに変える
  • FPS 視点なら CameraComponent の Relative Location.Z を直接アニメさせる
  • Crouch 中は Max Walk Speed Crouched + BrakingDeceleration も小さくして「重い動き」を演出

よくあるトラブル

症状原因対処
Crouch ノード呼んでも反応しないCan Crouch が OFFCharacter Movement → Can Crouch を ON
カプセルは縮むが Mesh が立ったままAnimBP の Crouch ステート未実装State Machine に Crouch ステート追加
しゃがんだあと立てない頭上に天井 / 障害物当たり判定を確認 / 強制 UnCrouch
しゃがみ中も速度が変わらないMax Walk Speed Crouched が大きい300〜400 程度に下げる
マルチプレイで他クライアントに反映されないReplication 不足Crouch ノードはサーバ経由で呼ぶ / Repnotify 利用

FAQ

Q: トグル式と押している間式、どちらが一般的?
A: ステルスゲーム / コソコソ系はトグル、シューティング系は押している間が多いです。ゲーム設定で切り替えられるようにしておくのが親切です。

Q: 匍匐前進(Prone)も同じ仕組みで実装できる?
A: 標準の Crouch は 1 段階だけです。Prone は独自の Movement Modeとして ECustomMovementMode を作るか、Crouch をさらに小さくして二段階目を実装する形になります。

Q: VR でしゃがみを実装するには?
A: 物理的にユーザーがしゃがむケースは HMD の頭の高さで自動検出する方法、入力ボタンで仮想キャラのみしゃがむ方法の 2 通り。VR 酔い対策のため頭の急な上下動を避けるのが定石です。