diff --git a/Basis/Packages/com.basis.examples/Mirror/Editor/BasisSDKMirrorEditor.cs b/Basis/Packages/com.basis.examples/Mirror/Editor/BasisSDKMirrorEditor.cs index 756ab3535..2649441c7 100644 --- a/Basis/Packages/com.basis.examples/Mirror/Editor/BasisSDKMirrorEditor.cs +++ b/Basis/Packages/com.basis.examples/Mirror/Editor/BasisSDKMirrorEditor.cs @@ -21,6 +21,8 @@ public override VisualElement CreateInspectorGUI() mainSettings.Add(CreateProperty(serializedObj, "Renderer", "Renderer")); mainSettings.Add(CreateProperty(serializedObj, "MirrorsMaterial", "Mirror Material")); mainSettings.Add(CreateProperty(serializedObj, "ReflectingLayers", "Reflecting Layers")); + mainSettings.Add(CreateProperty(serializedObj, "clearFlags", "Clear Flags")); + mainSettings.Add(CreateProperty(serializedObj, "clearColor", "Clear Color")); var clipSettings = new VisualElement(); clipSettings.style.marginTop = 6; diff --git a/Basis/Packages/com.basis.examples/Scripts/BasisSDKMirror.cs b/Basis/Packages/com.basis.examples/Scripts/BasisSDKMirror.cs index 36bfe88ed..62925bb57 100644 --- a/Basis/Packages/com.basis.examples/Scripts/BasisSDKMirror.cs +++ b/Basis/Packages/com.basis.examples/Scripts/BasisSDKMirror.cs @@ -15,10 +15,21 @@ public class BasisSDKMirror : MonoBehaviour { + public enum MirrorClearFlags + { + FromReferenceCamera = 0, + Skybox = 1, + Color = 2, + Depth = 3, + Nothing = 4, + } + [Header("Main Settings")] public Renderer Renderer; public Material MirrorsMaterial; [SerializeField] private LayerMask ReflectingLayers; + [SerializeField] private MirrorClearFlags clearFlags = MirrorClearFlags.FromReferenceCamera; + [SerializeField] private Color clearColor = Color.black; public float ClipPlaneOffset = 0.001f; public float nearClipLimit = 0.01f; public float FarClipPlane = 25f; @@ -48,6 +59,43 @@ public class BasisSDKMirror : MonoBehaviour public Action OnCamerasRenderering; public Action OnCamerasFinished; + public LayerMask ReflectionLayers + { + get => ReflectingLayers; + set + { + ReflectingLayers = value; + if (LeftCamera) LeftCamera.cullingMask = ReflectingLayers; + if (RightCamera) RightCamera.cullingMask = ReflectingLayers; + } + } + + public MirrorClearFlags ClearFlags + { + get => clearFlags; + set + { + clearFlags = value; + Camera refCamera = BasisLocalCameraDriver.Instance.Camera; + if (LeftCamera) updateCameraClearFlags(LeftCamera, refCamera); + if (RightCamera) updateCameraClearFlags(RightCamera, refCamera); + } + } + + public Color ClearColor + { + get => clearColor; + set + { + clearColor = value; + if (clearFlags == MirrorClearFlags.Color) + { + if (LeftCamera) LeftCamera.backgroundColor = clearColor; + if (RightCamera) RightCamera.backgroundColor = clearColor; + } + } + } + private BasisMeshRendererCheck basisMeshRendererCheck; private Vector3 thisPosition; private Vector3 normal; @@ -375,6 +423,7 @@ private void CreateNewCamera(Camera sourceCamera, out Camera newCamera) newCamera.farClipPlane = FarClipPlane; newCamera.cullingMask = ReflectingLayers; newCamera.useOcclusionCulling = OcclusionCulling; + updateCameraClearFlags(newCamera, sourceCamera); if (newCamera.TryGetComponent(out UniversalAdditionalCameraData cameraData)) { @@ -388,4 +437,33 @@ private void VisibilityFlag(bool isVisible) { IsAbleToRender = isVisible; } + + private void updateCameraClearFlags(Camera camera, Camera refCamera) + { + switch (clearFlags) + { + case MirrorClearFlags.Skybox: + camera.clearFlags = CameraClearFlags.Skybox; + break; + case MirrorClearFlags.Color: + camera.backgroundColor = clearColor; + camera.clearFlags = CameraClearFlags.Color; + break; + case MirrorClearFlags.Depth: + camera.clearFlags = CameraClearFlags.Depth; + break; + case MirrorClearFlags.Nothing: + camera.clearFlags = CameraClearFlags.Nothing; + break; + case MirrorClearFlags.FromReferenceCamera: + default: + if (refCamera == null) + { + return; + } + camera.backgroundColor = refCamera.backgroundColor; + camera.clearFlags = refCamera.clearFlags; + break; + } + } } diff --git a/Basis/Packages/com.basis.shim/Shims/CilboxSceneBasis.cs b/Basis/Packages/com.basis.shim/Shims/CilboxSceneBasis.cs index 9b749d233..444f50d4f 100644 --- a/Basis/Packages/com.basis.shim/Shims/CilboxSceneBasis.cs +++ b/Basis/Packages/com.basis.shim/Shims/CilboxSceneBasis.cs @@ -24,6 +24,8 @@ public class CilboxSceneBasis : Cilbox "Basis.IBasisImageDownload", "Basis.BasisNetworkBehaviour", "System.Delegate", + "BasisSDKMirror", + "BasisSDKMirror+MirrorClearFlags", "UnityEngine.Texture2DArray", "Basis.SafeUtil",