ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
カメラ Pitch 制限の基本
UE5 (Unreal Engine 5) の三人称・一人称ゲームで、マウスやスティック操作によるカメラの上下回転 (Pitch) を一定角度で制限する方法を解説します。デフォルトでは -89° 〜 +89° まで回転可能ですが、これだと真下や真上まで向けてしまい、不自然な視界になります。
方法1: PlayerController の View Pitch を直接編集
最も標準的な方法。APlayerController にはViewPitchMin / ViewPitchMax プロパティが用意されています。
Blueprint での設定
- 自作 PlayerController BP を開く(無ければ Blueprints > New > Blueprint Class > PlayerController)
- Class Defaults を開く
- 検索バーに「Pitch」と入力
- Player Camera Manager Class 内に Inputs (legacy) のViewPitchMin / Max が存在しないので、PlayerCameraManager 側で設定する
- または 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 構成では、追加で以下の設定が必要:
| コンポーネント | 設定項目 | 値 |
|---|---|---|
| SpringArm | Use Pawn Control Rotation | true |
| SpringArm | Inherit Pitch / Yaw / Roll | 個別判断 (通常 Pitch のみ) |
| Camera | Use Pawn Control Rotation | false (SpringArm 経由なので) |
| Pawn | Use Controller Rotation Pitch | false (Pawn を回さない) |
| Pawn | Use Controller Rotation Yaw | true (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<FVector2D>();
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 off | true に |
| キャラ本体も上下に傾く | Pawn の Use Controller Rotation Pitch ON | false に |
| 感度がおかしい | 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 に切り替え。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 床の上に乗ったらイベントを発生させる方法
- OverlapAllDynamicとOverlapAllの違い
- タイトル画面を作る方法
- サードパーソンテンプレートでのキャラクター表示の仕組みと非表示にする方法
- ボタンに文字を記載する方法
- Event ActorBeginOverlapとOn Component Begin Overlapの違い
- キャラクターに特定のオブジェクトとの当たり判定を付ける
- 特定のオブジェクトに触れたとき、キャラクターが倒れるようにする
- 動いているオブジェクトに静止しているキャラクターが当たり判定を持たない原因と解決方法
- 「On Component Hit」に「Cast To ~」で複数のクラスを指定する方法
- Blenderファイルをインポートする方法
- 鏡を作成する方法
- レベルブループリントでキャラクターの出現を設定する方法
- サードパーソンテンプレートにおけるキャラクター出現の定義
- アイテムに近づいたらボタンを押してイベントを発火させる方法
- 画面の中央にメッセージを表示する方法
- どこからでも呼び出せるカスタムイベントを作成する方法
- カスタムイベントに引数を追加する方法
- 「Get Overlapping Actors」から特定のクラスの場合のみ処理を実行する方法
- オブジェクトに近づいている間だけメッセージを表示する方法
- PCの画面を操作するUIを作る方法
- コンテンツブラウザに画像を追加する方法
- SetInputMode_UIOnlyを取り消す方法
- 特定の画像の上にマウスカーソルを置いたら手マークにする方法
- オブジェクトがアウトライナーで選択できない原因と解決策
- PlayerStartを作成する方法
- メニュー画面を作成して開く方法
- 「Esc」キーを押してメニュー画面を開く方法
- イベントの「On Clicked」と「On Pressed」の違い
- 「Set Input Mode」の種類と使い方
- 「Set Game Paused」の使い方と詳細解説
- Motion Matchingとは?
- 「GameMode」と「GameModeBase」の違い
- マップに配置したTargetPointを取得する方法
- TargetPointにタグをつけて取得する方法
- Spawnしたインスタンスがイベントを実行する方法
- 特定の時間ごとに処理を実行する方法
- 数値をランダムで出力する方法
- ThirdPersonテンプレートでキャラクターの移動を歩くように変更する方法
- MaxWalkSpeedを変更する方法
- しゃがむ動作を導入する方法
- キャラクターのアニメーションを設定する方法
- 導入済みのプラグインを確認する方法
- Motion Matchingの導入と必要なプラグイン
- プレイヤーを非表示にする方法
- カメラを傾ける角度を制限させる方法
- 配列からランダムに重ならない要素を特定の数取得する方法
- カメラの映す画面に文字やエフェクトを付ける方法
- キャラクターやメッシュを非表示にした際にカメラが移動しなくなる問題の解決方法
- プライマリーデータアセットを活用する方法
- プレイヤーのHPといった変数を定義する最適な場所
- カメラに映った画面をスクリーンショットとして保存する方法
- ゲーム内のカメラ映像を保存して再表示する方法
- HighResShot を使って高解像度の画像を保存する方法(UE5)
- HighResShotで保存した画像のファイル名を取得する方法
- SceneCapture2DとFrameGrabberの画像保存方法の比較
- SceneCapture2Dを使用して画像を保存・取得する方法
- HighResShotとTake High Res Screenshotの違い
- ゲーム終了ボタンを作成する方法
- 「Save Game To Slot」の戻り値がfalseになる問題の解決方法
- 画面上にメッセージを指定された時間表示させる方法
- シェーダコンパイル時間を短縮する方法
- 「Take High Res Screenshot」実行時に「シェーダをコンパイル」に長時間待たされる問題とその解決策
- データベースを活用する方法
- UE5.5がインストールされた環境にUE5.4を追加で導入する方法
- World PartitionとWorld Compositionの違い
- オープンワールドテンプレートとは?
- ポーンをスポーンさせても視点を切り替えない方法
- キャラクター同士がすり抜けてしまう問題の解決方法
- キャラクターの外見を動的に変更
- World Partitionでインスタンスが「アンロード済み」になる問題
- データ アセットとデータ テーブルの違い
- コンポーネントイベントグラフ内で親クラスの変数にアクセスする方
- エディターのソースコードの自動保存の頻度を高める方法
- SpawnActorでSpawn Transform Rotationが反映されない理由
- ミニマップを表示しポーンの位置を反映する方法
- RInterp ToとVInterp Toの違い
- 毎秒実行するイベントの定義方法
- Niagara のエフェクトにコリジョンを持たせる方法
- 「Overlap」と「Hit」の違い
- OverlapはあるがHitがない原因
- Overlapした位置の座標を取得する方法
- ブループリントでレベル間のパラメータを受け渡す方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?