Skip to content

Commit 2b24ff4

Browse files
committed
Use renderer visibility for multiplayer avatars
1 parent c67c25c commit 2b24ff4

2 files changed

Lines changed: 14 additions & 87 deletions

File tree

Assets/Scripts/Multiplayer/MultiplayerManager.cs

Lines changed: 13 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,6 @@ private bool isUserRoomOwner
169169
[NonSerialized] public bool m_IsAllMutedForAll;
170170
public bool ArePlayerAvatarsHiddenForMe { get; private set; }
171171

172-
private const string k_MultiplayerAvatarLayerName = "MultiplayerAvatar";
173-
174172
public bool IsViewOnly
175173
{
176174
get
@@ -478,38 +476,19 @@ public void MutePlayerForMe(bool muted, int playerId)
478476

479477
public bool SetPlayerAvatarsHiddenForMe(bool hidden)
480478
{
481-
int avatarLayer = LayerMask.NameToLayer(k_MultiplayerAvatarLayerName);
482-
Camera playerCamera = App.VrSdk?.GetVrCamera();
483-
Camera spectatorCamera = SketchControlsScript.m_Instance?
484-
.GetDropCampWidget()?.GetComponentInChildren<Camera>(true);
485-
if (avatarLayer < 0 || playerCamera == null || spectatorCamera == null)
486-
{
487-
Debug.LogWarning(
488-
$"[MultiplayerAvatarVisibility] Could not set hidden={hidden}: " +
489-
$"avatarLayer={avatarLayer}, playerCameraAvailable={playerCamera != null}, " +
490-
$"spectatorCameraAvailable={spectatorCamera != null}.");
491-
return false;
492-
}
493-
494-
int avatarMask = 1 << avatarLayer;
495-
SetCameraLayerVisible(playerCamera, avatarMask, !hidden);
496-
SetCameraLayerVisible(spectatorCamera, avatarMask, !hidden);
497-
498-
if (!hidden)
479+
int rendererCount = 0;
480+
foreach (RemotePlayer player in m_RemotePlayers.List)
499481
{
500-
foreach (RemotePlayer player in m_RemotePlayers.List)
482+
if (!hidden)
501483
{
502484
player.m_IsHiddenForMe = false;
503-
SetAvatarRenderersHidden(player, false);
504485
}
486+
rendererCount += SetAvatarRenderersHidden(player, hidden);
505487
}
506488

507489
ArePlayerAvatarsHiddenForMe = hidden;
508490
Debug.Log(
509-
$"[MultiplayerAvatarVisibility] hidden={hidden}, " +
510-
$"playerCamera={playerCamera.name}, playerCullingMask={playerCamera.cullingMask}, " +
511-
$"spectatorCamera={spectatorCamera.name}, " +
512-
$"spectatorCullingMask={spectatorCamera.cullingMask}.");
491+
$"[MultiplayerAvatarVisibility] hidden={hidden}, rendererCount={rendererCount}.");
513492
return true;
514493
}
515494

@@ -518,71 +497,23 @@ public bool SetPlayerAvatarHiddenForMe(bool hidden, int playerId)
518497
RemotePlayer player = GetPlayerById(playerId);
519498
if (player == null) return false;
520499

521-
if (!hidden && !ArePlayerAvatarsHiddenForMe)
522-
{
523-
SetAvatarLayerVisibleOnAvailableCameras(true);
524-
}
525-
526500
player.m_IsHiddenForMe = hidden;
527-
int rendererCount = SetAvatarRenderersHidden(player, hidden);
501+
bool effectivelyHidden = hidden || ArePlayerAvatarsHiddenForMe;
502+
int rendererCount = SetAvatarRenderersHidden(player, effectivelyHidden);
528503
Debug.Log(
529504
$"[MultiplayerAvatarVisibility] playerId={playerId}, hidden={hidden}, " +
530-
$"rendererCount={rendererCount}.");
505+
$"effectivelyHidden={effectivelyHidden}, rendererCount={rendererCount}.");
531506
return true;
532507
}
533508

534-
private static void SetCameraLayerVisible(Camera camera, int layerMask, bool visible)
509+
private static void InitializeAvatarVisibility(RemotePlayer player, bool hidden)
535510
{
536-
if (visible)
537-
{
538-
camera.cullingMask |= layerMask;
539-
}
540-
else
541-
{
542-
camera.cullingMask &= ~layerMask;
543-
}
544-
}
511+
if (player?.PlayerGameObject == null) return;
545512

546-
private static void SetAvatarLayerVisibleOnAvailableCameras(bool visible)
547-
{
548-
int avatarLayer = LayerMask.NameToLayer(k_MultiplayerAvatarLayerName);
549-
if (avatarLayer < 0) return;
550-
551-
int avatarMask = 1 << avatarLayer;
552-
Camera playerCamera = App.VrSdk?.GetVrCamera();
553-
Camera spectatorCamera = SketchControlsScript.m_Instance?
554-
.GetDropCampWidget()?.GetComponentInChildren<Camera>(true);
555-
if (playerCamera != null)
556-
{
557-
SetCameraLayerVisible(playerCamera, avatarMask, visible);
558-
}
559-
if (spectatorCamera != null)
560-
{
561-
SetCameraLayerVisible(spectatorCamera, avatarMask, visible);
562-
}
563-
}
564-
565-
private static void AssignAvatarLayer(RemotePlayer player)
566-
{
567-
int avatarLayer = LayerMask.NameToLayer(k_MultiplayerAvatarLayerName);
568-
if (avatarLayer < 0 || player?.PlayerGameObject == null) return;
569-
570-
Renderer[] renderers =
571-
player.PlayerGameObject.GetComponentsInChildren<Renderer>(true);
572-
foreach (Renderer renderer in renderers)
573-
{
574-
renderer.gameObject.layer = avatarLayer;
575-
renderer.forceRenderingOff = player.m_IsHiddenForMe;
576-
}
577-
578-
Camera playerCamera = App.VrSdk?.GetVrCamera();
579-
Camera spectatorCamera = SketchControlsScript.m_Instance?
580-
.GetDropCampWidget()?.GetComponentInChildren<Camera>(true);
513+
int rendererCount = SetAvatarRenderersHidden(player, hidden);
581514
Debug.Log(
582515
$"[MultiplayerAvatarVisibility] initialized playerId={player.PlayerId}, " +
583-
$"hidden={player.m_IsHiddenForMe}, rendererCount={renderers.Length}, " +
584-
$"avatarLayer={avatarLayer}, playerCameraMask={playerCamera?.cullingMask}, " +
585-
$"spectatorCameraMask={spectatorCamera?.cullingMask}.");
516+
$"hidden={hidden}, rendererCount={rendererCount}.");
586517
}
587518

588519
private static int SetAvatarRenderersHidden(RemotePlayer player, bool hidden)
@@ -730,11 +661,7 @@ void OnLocalPlayerJoined(int id, ITransientData<PlayerRigData> playerData)
730661

731662
void OnRemotePlayerJoined(RemotePlayer newRemotePlayer)
732663
{
733-
if (!ArePlayerAvatarsHiddenForMe)
734-
{
735-
SetAvatarLayerVisibleOnAvailableCameras(true);
736-
}
737-
AssignAvatarLayer(newRemotePlayer);
664+
InitializeAvatarVisibility(newRemotePlayer, ArePlayerAvatarsHiddenForMe);
738665
m_RemotePlayers.AddPlayer(newRemotePlayer);
739666

740667
if (!isUserRoomOwner) return; //below this line is only room owner responsability

ProjectSettings/TagManager.asset

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ TagManager:
3232
- PinnedStencilObject
3333
- Overlay
3434
- Environment
35-
- MultiplayerAvatar
35+
-
3636
-
3737
-
3838
-

0 commit comments

Comments
 (0)