マルチプレイやSceneCaotureComponentがある中で特定のアクタを自分(プレイヤーのカメラ)だけ映さないようにする方法をメモしておきます。
確認環境
UE4.27.2
Visibility、HiddenInGameを使う方法
ComponentのVisibilityかActorのHiddenInGameを使って対象を非表示にします。
ただし、マルチプレイの場合はActorやComponentのReplication設定によってサーバーでの変更がクライアントに反映され、サーバーのみ不可視にするのが不可能な場合があります。
HiddinInGameの場合は、ActorのReplication設定でAlways RelevantとReplicatesがオンの場合やActorのReplicatesがオンでStaticMeshComponentなどのComponent Replicatesがオンの場合にサーバーでの変更がクライアントにも反映されていました。
Visibilityの場合は、ActorのReplicatesがオンでStaticMeshComponentなどのComponent Replicatesがオンの場合にサーバーでの変更がクライアントにも反映されていました。
(上記以外でもサーバーの変更が反映される条件があるかもしれません)
また、対象はSceneCaptureComponentやプレイヤーのカメラに一律に映らなくなります。
自分だけ映さない方法
APlayerControllerのHiddenActorsに隠したいアクタを追加します。
マルチプレイでも他のサーバーやクライアントには影響しません。
また、プレイヤーのカメラだけに映らなくなってSceneCaptureComponentには映ります。
HiddenActorsはBlueprintに公開されていないのでAPlayerControllerを継承したクラスで以下のようにしておくとBlueprintから利用できます。
UFUNCTION(BlueprintCallable)
void AddHiddenActor(AActor* Actor)
{
HiddenActors.Add(Actor);
}
HiddenPrimitiveComponentもあるのでそちらも使えそうです。
おまけ:SceneCaptureComponentで特定のアクタを映さないようにする
HiddenActorsがあってBlueprintにも公開されています。
HiddenComponentsもありますがBlueprintには公開されていません。
そのかわり、HideActorComponents、HideComponent、ClearHiddenComponentsなどのメソッドは用意されてるみたいでBlueprintから利用できます。