private void OnGUI() { emptyLayer = 0; UTUtils.GetLayerMasks(); UTStyles.RenderHeader("Camera System Setup"); UTStyles.RenderNote("This tool will set up a camera system in your scene, for more details on how to customize the camera - consult the documentation page."); if (GUILayout.Button("Documentation", GUILayout.ExpandWidth(true))) { Application.OpenURL(WikiURL); } UTStyles.RenderSectionHeader("Position and Style"); var newCameraSpot = (Transform)EditorGUILayout.ObjectField("Camera Position", cameraSpot, typeof(Transform), true); if (newCameraSpot != cameraSpot) { setup = false; } cameraSpot = newCameraSpot; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Watermark Overlay"); watermark = (Texture)EditorGUILayout.ObjectField(watermark, typeof(Texture), true); EditorGUILayout.EndHorizontal(); UTStyles.RenderNote("Overlay should be a 16:9 transparent texture"); addGuide = EditorGUILayout.Toggle("Add Camera Guide", addGuide); if (addGuide) { var newGuideStyle = (GuideStyle)EditorGUILayout.EnumPopup("Guide Panel Style", guideStyle); if (newGuideStyle != guideStyle || standObj == null || standObjEditor == null) { var standPath = newGuideStyle == GuideStyle.Futuristic ? SciFiStandPath : TikiStandPath; standObj = AssetDatabase.LoadAssetAtPath(GetAssetPath(standPath), typeof(object)); standObjEditor = UnityEditor.Editor.CreateEditor(standObj); } var r = GUILayoutUtility.GetRect(450, 150); standObjEditor.OnPreviewGUI(r, EditorStyles.helpBox); guideStyle = newGuideStyle; } UTStyles.RenderSectionHeader("PostProcessing and Collisions"); UTStyles.RenderNote("Layers are very important to the overall setup. Make sure you follow the instructions below"); layers.Clear(); for (int i = 0; i < 32; i++) { var layerName = LayerMask.LayerToName(i); if (layerName.Length > 0) { layers.Add($"[{i}] {layerName}"); } else { if (i > 22 && emptyLayer == 0) { emptyLayer = i; } layers.Add($"[{i}] -- not set --"); } } var layersArr = layers.ToArray(); if (emptyLayer != 0) { if (GUILayout.Button("Setup Layers")) { SetupLayers(); } UTStyles.RenderNote("It seems like you have empty layers available, UdonToolkit can set up everything for you if you click the button above"); UTStyles.HorizontalLine(); } cameraPPLayer = EditorGUILayout.Popup("Camera PP Layer", cameraPPLayer, layersArr); UTStyles.RenderNote("This layer will be used for detecting PP volumes for the Camera System"); if (cameraPPLayer == 22) { EditorGUILayout.HelpBox("It is crucial to not put Camera PP volumes on the same layer as the main PostProcessing, or your own view will be affected by the camera effects", MessageType.Warning); } if (setup) { var oldColor = GUI.backgroundColor; GUI.backgroundColor = Color.green; UTStyles.RenderNote("Camera system has been set up in the scene!"); GUI.backgroundColor = oldColor; } if (GUILayout.Button("Create Camera System", GUILayout.Height(30))) { RunCameraSetup(); } if (GUILayout.Button("Add Guide Stand Only", GUILayout.Height(20))) { AddGuide(); } }