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

タイトル: カメラを傾ける角度を制限させる方法
SEOタイトル: UE5 カメラ傾き角度制限完全ガイド (Pitch Min/Max)

この記事の要点
  • UE5 のカメラ角度制限は PlayerControllerViewPitchMin / ViewPitchMax で設定
  • デフォルトは -89° 〜 +89°。通常は -80° 〜 +80° 程度に制限
  • Blueprint なら Player Controller の Class Defaults で直接編集、C++ なら APlayerController 派生で設定
  • Enhanced Input で Modifier (Clamp) を使うと入力段階でも制限可能
  • SpringArm + Camera の構成では Use Pawn Control Rotation ON + コントローラ側で制限

カメラ Pitch 制限の基本

UE5 (Unreal Engine 5) の三人称・一人称ゲームで、マウスやスティック操作によるカメラの上下回転 (Pitch) を一定角度で制限する方法を解説します。デフォルトでは -89° 〜 +89° まで回転可能ですが、これだと真下や真上まで向けてしまい、不自然な視界になります。

方法1: PlayerController の View Pitch を直接編集

最も標準的な方法。APlayerController にはViewPitchMin / ViewPitchMax プロパティが用意されています。

Blueprint での設定

  1. 自作 PlayerController BP を開く(無ければ Blueprints > New > Blueprint Class > PlayerController
  2. Class Defaults を開く
  3. 検索バーに「Pitch」と入力
  4. Player Camera Manager Class 内に Inputs (legacy) のViewPitchMin / Max が存在しないので、PlayerCameraManager 側で設定する
  5. または PlayerController の InputPitchScale / Yaw / Roll でスケール調整

PlayerCameraManager を派生して設定

// MyPlayerCameraManager.h
#pragma once
#include "CoreMinimal.h"
#include "Camera/PlayerCameraManager.h"
#include "MyPlayerCameraManager.generated.h"

UCLASS()
class AMyPlayerCameraManager : public APlayerCameraManager
{
    GENERATED_BODY()
public:
    AMyPlayerCameraManager();
};

// MyPlayerCameraManager.cpp
AMyPlayerCameraManager::AMyPlayerCameraManager()
{
    ViewPitchMin = -80.0f;
    ViewPitchMax = 80.0f;
    ViewYawMin = 0.0f;     // 360° 回転制限なし用は変えない
    ViewYawMax = 359.999f;
    ViewRollMin = 0.0f;
    ViewRollMax = 359.999f;
}

そして PlayerController で指定

// MyPlayerController.cpp
#include "MyPlayerCameraManager.h"

AMyPlayerController::AMyPlayerController()
{
    PlayerCameraManagerClass = AMyPlayerCameraManager::StaticClass();
}

方法2: BeginPlay で動的に制限

動的にゲーム中で制限値を変えたい場合(例: スコープを覗いたら制限を狭める):

void AMyPlayerController::BeginPlay()
{
    Super::BeginPlay();

    if (PlayerCameraManager)
    {
        PlayerCameraManager->ViewPitchMin = -60.0f;
        PlayerCameraManager->ViewPitchMax = 60.0f;
    }
}

// 通常モード
void AMyPlayerController::SetNormalPitchLimits()
{
    if (PlayerCameraManager)
    {
        PlayerCameraManager->ViewPitchMin = -80.0f;
        PlayerCameraManager->ViewPitchMax = 80.0f;
    }
}

// スコープ覗き
void AMyPlayerController::SetScopePitchLimits()
{
    if (PlayerCameraManager)
    {
        PlayerCameraManager->ViewPitchMin = -30.0f;
        PlayerCameraManager->ViewPitchMax = 30.0f;
    }
}

Blueprint 版

Event BeginPlay
  → Get Player Camera Manager
  → Set View Pitch Min (-80)
  → Set View Pitch Max (80)

方法3: SpringArm + Camera 構成

三人称ゲームで一般的な SpringArm + Camera 構成では、追加で以下の設定が必要:

コンポーネント設定項目
SpringArmUse Pawn Control Rotationtrue
SpringArmInherit Pitch / Yaw / Roll個別判断 (通常 Pitch のみ)
CameraUse Pawn Control Rotationfalse (SpringArm 経由なので)
PawnUse Controller Rotation Pitchfalse (Pawn を回さない)
PawnUse Controller Rotation Yawtrue (Pawn の向きは Yaw 追従)

これで Controller の RotationInput が SpringArm の Pitch のみ反映され、PlayerCameraManager の ViewPitchMin/Max で制限が効きます。

方法4: Enhanced Input で入力段階制限

UE5 標準の Enhanced Input なら Input Modifier で値を制限する方法もあります:

// Input Action: IA_Look (Vector2D, X=Yaw, Y=Pitch)

// Input Mapping Context で
// IA_Look の Modifier に "Clamp" や "DeadZone" を追加

// Trigger で Pitch のみ範囲制限したい場合
// → 自作 UInputModifier クラスで実装

UCLASS()
class UInputModifierClampPitch : public UInputModifier
{
    GENERATED_BODY()
protected:
    virtual FInputActionValue ModifyRaw_Implementation(
        const UEnhancedPlayerInput* PlayerInput,
        FInputActionValue CurrentValue,
        float DeltaTime) override
    {
        FVector2D V = CurrentValue.Get();
        V.Y = FMath::Clamp(V.Y, -1.0f, 1.0f);
        return FInputActionValue(V);
    }
};

First Person vs Third Person の違い

形式推奨 Pitch 範囲備考
FPS-89° 〜 +89°地面・天井ギリギリまで見られる
FPS スコープ-30° 〜 +30°感度低下と組み合わせ
TPS (肩越し)-60° 〜 +70°カメラの突き抜けを考慮
俯瞰 (見下ろし)-90° 固定 or -80° 〜 -60°RTS / Diablo 風
レーシング-20° 〜 +20°視界中央を維持

マウス感度 (Sensitivity) と組み合わせ

// PlayerController の Input* Scale
APlayerController* PC = GetController();
PC->InputPitchScale_DEPRECATED = 1.0f;  // (UE5 では非推奨、Enhanced Input 推奨)

// Enhanced Input で感度設定
// Input Modifier "Scalar" を 0.5 等にして感度低下

// スコープ時感度
const float ZoomSensitivity = 0.3f;
PC->InputModifiers.Apply(ZoomSensitivity);

マルチプレイヤーでの注意

サーバ・クライアント両方で Pitch 制限が同じである必要があります。PlayerController はクライアント側に存在しますが、Pawn の Rotation はサーバが権威を持つので、不一致でカメラが飛ぶことがあります:

// Pawn の ControlRotation を Replicate する場合
DOREPLIFETIME_CONDITION(AMyCharacter, RemoteViewPitch,
    COND_SkipOwner);

// 制限値はクライアント・サーバ両方で同じに
AMyPlayerCameraManager::AMyPlayerCameraManager()
{
    ViewPitchMin = -80.0f;
    ViewPitchMax = 80.0f;
}

トラブルシューティング

症状原因対処
制限が効かないPlayerCameraManager 未差し替えPlayerController で PlayerCameraManagerClass を設定
真上・真下を向けるViewPitchMax/Min がデフォルト 89°BeginPlay で再設定 or PlayerCameraManager 派生
SpringArm が回らないUse Pawn Control Rotation offtrue に
キャラ本体も上下に傾くPawn の Use Controller Rotation Pitch ONfalse に
感度がおかしいEnhanced Input Modifier 未設定Scalar / DeadZone を追加

FAQ

Q: 動的に制限を変えるとカクッと飛ぶ
A: 現在の Pitch が新しい範囲外だと即クランプされます。Lerp で滑らかに補間してから制限を変えてください。

Q: 第三者視点で壁にカメラがめり込む
A: SpringArm の Do Collision Test を true、Camera Lag を有効化、Probe Channel を Camera に設定。

Q: スティック入力では制限したいが、シネマカメラでは制限なしにしたい
A: シネマ用は別 PlayerCameraManager または Set View Target with Blend で Cinematic Camera Actor に切り替え。