C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

UE4: TPSカメラの当たり判定を on/off する簡単な方法、あるいは USpringArmComponent のそれについて

概要

TPS テンプレートで生成されるような、プレイヤーの回りにぐるぐるとカメラを回す実装ではしばしば床、天井、柱、地形、キャラクター、その他の何らかの物体に対して「カメラの当たり判定」が有って欲しい状況と無い方が好ましい状況、あるいは実行中のその切り替えが欲しい場合がある。

UE4では一般にカメラとの当たり判定処理についてググると「カメラに当たりたくないオブジェクトのコリジョンからカメラを外せ」的な方法ばかり出てきますが、 TPS テンプレートで標準でプレイヤーに付いているようなカメラの場合はもっと簡単に対応できるので紹介したい。

前提知識: TPS のカメラとは何か

TPS テンプレートで標準で設定されるカメラは「プレイヤーキャラクターにアタッチしたスプリングアームにアタッチしたカメラ」です。

AMyCharacter <-- USpringArmComponent <-- UCameraComponent

TPS カメラの当たり判定の on / off

// TPS テンプレートで作られるプレイヤーキャラクターまたは同様の何かの ctor で
// TPS カメラの当たり判定を無効にする場合
AMyCharacter::AMyCharacter()
{
  // 生成とアタッチと回転制御はテンプレートまま(本題ではない)
  CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
  CameraBoom->SetupAttachment(RootComponent);
  CameraBoom->bUsePawnControlRotation = true;
  // これだけでカメラの当たり判定が無効になる
  CameraBoom->bDoCollisionTest = false;
}

// おまけ: ToggleCameraCollision 関数として実装する場合
void AMyCharacter::ToggleCameraCollision()
{ CameraBoom->bDoCollisionTest = ! CameraBoom->bDoCollisionTest; }

Note

  • 大雑把に on / off できれば構わない場合はおそらく最も簡単
  • オブジェクト個別やトレースチャンネルレベルでの細かい設定ではないので、その必要がある際は諦めてちまちまコリジョン設定する

Reference

  1. USpringArmComponent | Unreal Engine