5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

UnrealEngineで特定のアクタを自分だけ映さないようにする

Last updated at Posted at 2022-08-30

マルチプレイや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には公開されていません。
そのかわり、HideActorComponentsHideComponentClearHiddenComponentsなどのメソッドは用意されてるみたいでBlueprintから利用できます。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?