362cad20883d — Rune Skovbo Johansen 3 years ago
Implement macOS retina support.
M Assets/Frontend/CameraZoom.cs +4 -3
@@ 1,5 1,5 @@ 
 /*
- * Copyright (c) 2016 Rune Skovbo Johansen
+ * Copyright (c) 2021 Rune Skovbo Johansen
  *
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this

          
@@ 25,8 25,9 @@ public class CameraZoom : MonoBehaviour 
 	}
 
 	void OnGUI () {
+		GUI.matrix = Matrix4x4.identity;
 		Event evt = Event.current;
-		bool inside = cam.pixelRect.Contains (evt.mousePosition);
+		bool inside = cam.pixelRect.ToPoints ().FlipY ().Contains (evt.mousePosition);
 
 		int id = GUIUtility.GetControlID (FocusType.Passive);
 		if (evt.type == EventType.MouseDown && (evt.button == 2 || PuzzleFront.hovered == null) && inside) {

          
@@ 39,7 40,7 @@ public class CameraZoom : MonoBehaviour 
 		else if (evt.type == EventType.MouseDrag && GUIUtility.hotControl == id) {
 			Vector2 delta = evt.mousePosition - mouseDown;
 			delta.y = -delta.y;
-			float mult = (cam.orthographicSize * 2 / Screen.height);
+			float mult = (cam.orthographicSize * 2 / RetinaHandler.height);
 			transform.position = mouseDownPos -	(Vector3)delta * mult;
 			evt.Use ();
 		}

          
M Assets/Frontend/Extensions.cs +12 -2
@@ 1,5 1,5 @@ 
 /*
- * Copyright (c) 2016 Rune Skovbo Johansen
+ * Copyright (c) 2021 Rune Skovbo Johansen
  *
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this

          
@@ 12,6 12,16 @@ using System.Collections;
 public static class Extensions {
 
 	public static Rect FlipY (this Rect rect) {
-		return new Rect (rect.x, Screen.height - rect.yMax, rect.width, rect.height);
+		return new Rect (rect.x, RetinaHandler.height - rect.yMax, rect.width, rect.height);
+	}
+
+	public static Rect ToPixels (this Rect rect) {
+		float s = RetinaHandler.scale;
+		return new Rect (rect.x * s, rect.y * s, rect.width * s, rect.height * s);
+	}
+
+	public static Rect ToPoints (this Rect rect) {
+		float s = 1f / RetinaHandler.scale;
+		return new Rect (rect.x * s, rect.y * s, rect.width * s, rect.height * s);
 	}
 }

          
M Assets/Frontend/GraphDrawer.cs +3 -2
@@ 1,5 1,5 @@ 
 /*
- * Copyright (c) 2016 Rune Skovbo Johansen
+ * Copyright (c) 2021 Rune Skovbo Johansen
  *
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this

          
@@ 166,7 166,8 @@ public class GraphDrawer : MonoBehaviour
 		if (layouter == null)
 			return;
 
-		GUILayout.BeginArea (cam.pixelRect.FlipY ());
+		RetinaHandler.SetGUIMatrix ();
+		GUILayout.BeginArea (cam.pixelRect.ToPoints ().FlipY ());
 
 		ReadOnlyPuzzle puzzle = layouter.puzzle;
 		GUI.Label (new Rect (10, 5, 100, 100),

          
M Assets/Frontend/Manager.cs +13 -21
@@ 1,5 1,5 @@ 
 /*
- * Copyright (c) 2016 Rune Skovbo Johansen
+ * Copyright (c) 2021 Rune Skovbo Johansen
  *
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this

          
@@ 41,10 41,10 @@ public class Manager : MonoBehaviour {
 		// toolsWidth and graphWidth are each including splitterWidth.
 		// puzzleWidth is not.
 		float toolingWidth = (kToolsWidth - kSplitterWidth) * showToolsValue + kSplitterWidth;
-		float mainWidth = Screen.width - toolingWidth - kSplitterWidth;
+		float mainWidth = RetinaHandler.width - toolingWidth - kSplitterWidth;
 		float graphWidth = (mainWidth * graphFraction + kSplitterWidth * 0.5f) * showGraphValue;
 		float puzzleWidth = mainWidth - graphWidth;
-		float mainHeight = Screen.height - kMenuBarHeight - kSplitterWidth;
+		float mainHeight = RetinaHandler.height - kMenuBarHeight - kSplitterWidth;
 
 		/*Rect toolsRect = new Rect (
 			0,

          
@@ 62,47 62,39 @@ public class Manager : MonoBehaviour {
 			graphWidth - kSplitterWidth,
 			mainHeight);
 
-		testerCam.pixelRect = puzzleRect;
-		graphCam.pixelRect = graphRect;
+		testerCam.pixelRect = puzzleRect.ToPixels ();
+		graphCam.pixelRect = graphRect.ToPixels ();
 	}
 
 	void OnGUI () {
+		RetinaHandler.SetGUIMatrix ();
 		GUI.skin = skin;
-
-		// Meny bar background
-		GUI.Box (
-			new Rect (
-				0,
-				0,
-				Screen.width,
-				kMenuBarHeight
-			),
-			string.Empty
-		);
+		GUI.Window (-1, new Rect (0, 0, RetinaHandler.width, kMenuBarHeight), MenuBarWindow, "");
 
 		// Tools background
 		GUI.Box (
 			new Rect (
-				- (kToolsWidth - kSplitterWidth) * (1 - showToolsValue),
+				-(kToolsWidth - kSplitterWidth) * (1 - showToolsValue),
 				kMenuBarHeight - kSplitterWidth,
 				kToolsWidth,
-				Screen.height - (kMenuBarHeight - kSplitterWidth)
+				RetinaHandler.height - (kMenuBarHeight - kSplitterWidth)
 			),
 			string.Empty
 		);
+	}
 
-		// Menu
+	void MenuBarWindow (int id) {
 		Rect rect;
 
 		rect = new Rect (kSpacing, 0, kButtonWidth, kMenuBarHeight);
 		if (GUI.Button (rect, "Menu"))
 			puzzleTester.ShowMenu ();
 
-		rect = new Rect ((Screen.width - kButtonWidth) * 0.5f, 0, kButtonWidth, kMenuBarHeight);
+		rect = new Rect ((RetinaHandler.width - kButtonWidth) * 0.5f, 0, kButtonWidth, kMenuBarHeight);
 		if (GUI.Button (rect, puzzleTester.playing ? "Stop" : "Play"))
 			puzzleTester.playing = !puzzleTester.playing;
 
-		rect = new Rect (Screen.width - kSpacing - kButtonWidth, 0, kButtonWidth, kMenuBarHeight);
+		rect = new Rect (RetinaHandler.width - kSpacing - kButtonWidth, 0, kButtonWidth, kMenuBarHeight);
 		if (GUI.Button (rect, showGraph ? "Hide States" : "Show States"))
 			showGraph = !showGraph;
 

          
M Assets/Frontend/PuzzleTester.cs +17 -15
@@ 1,5 1,5 @@ 
 /*
- * Copyright (c) 2016 Rune Skovbo Johansen
+ * Copyright (c) 2021 Rune Skovbo Johansen
  *
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this

          
@@ 109,17 109,19 @@ public class PuzzleTester : MonoBehaviou
 	}
 
 	void OnGUI () {
+		RetinaHandler.SetGUIMatrix ();
 		GUI.skin = skin;
+
 		if (Event.current.type != EventType.Layout)
 			tooltip = null;
 
 		if (menu != MenuOption.None) {
-			if (GUI.Button (new Rect (0, 0, Screen.width, Screen.height), string.Empty, GUIStyle.none))
+			if (GUI.Button (new Rect (0, 0, RetinaHandler.width, RetinaHandler.height), string.Empty, GUIStyle.none))
 				menu = MenuOption.None;
 		}
 
 		float menuWidth = kLargeButtonSize * 2 + kSpacing * 3 + kBorder * 2;
-		Rect position = new Rect (cam.pixelRect.xMin - menuWidth, 0, menuWidth, Screen.height);
+		Rect position = new Rect (cam.pixelRect.ToPoints ().xMin - menuWidth, 0, menuWidth, RetinaHandler.height);
 
 		GetRect (ref position, 40, kWindowSpacing);
 

          
@@ 140,29 142,29 @@ public class PuzzleTester : MonoBehaviou
 			GUI.Window (0, menuWindowRect, MenuWindow, string.Empty);
 		}
 		if (menu == MenuOption.Open) {
-			Vector2 size = new Vector2 (Mathf.Min (Screen.width, 300), Mathf.Min (Screen.height, 300));
+			Vector2 size = new Vector2 (Mathf.Min (RetinaHandler.width, 300), Mathf.Min (RetinaHandler.height, 300));
 			modalWindowRect = new Rect (
-				Mathf.RoundToInt ((Screen.width - size.x) / 2), Mathf.RoundToInt ((Screen.height - size.y) / 2),
+				Mathf.RoundToInt ((RetinaHandler.width - size.x) / 2), Mathf.RoundToInt ((RetinaHandler.height - size.y) / 2),
 				size.x, size.y);
 			GUI.Window (4, modalWindowRect, OpenWindow, "Open Puzzle");
 		}
 		if (menu == MenuOption.Save) {
-			Vector2 size = new Vector2 (Mathf.Min (Screen.width, 300), Mathf.Min (Screen.height, 80));
+			Vector2 size = new Vector2 (Mathf.Min (RetinaHandler.width, 300), Mathf.Min (RetinaHandler.height, 80));
 			modalWindowRect = new Rect (
-				Mathf.RoundToInt ((Screen.width - size.x) / 2), Mathf.RoundToInt ((Screen.height - size.y) / 2),
+				Mathf.RoundToInt ((RetinaHandler.width - size.x) / 2), Mathf.RoundToInt ((RetinaHandler.height - size.y) / 2),
 				size.x, size.y);
 			GUI.Window (5, modalWindowRect, SaveWindow, "Save Puzzle");
 		}
 
 		if (Time.time < hideHelpTime + 1) {
-			modalWindowRect = new Rect (0, 0, Screen.width, Screen.height);
+			modalWindowRect = new Rect (0, 0, RetinaHandler.width, RetinaHandler.height);
 			modalWindowRect.y -= modalWindowRect.height * Mathf.Max (0, Time.time - hideHelpTime) * 4;
 			GUI.Window (7, modalWindowRect, HelpWindow, "Help");
 			GUI.BringWindowToFront (7);
 		}
 
 		if (Time.time < hideAboutTime + 1) {
-			modalWindowRect = new Rect (0, 0, Screen.width, Screen.height);
+			modalWindowRect = new Rect (0, 0, RetinaHandler.width, RetinaHandler.height);
 			modalWindowRect.y -= modalWindowRect.height * Mathf.Max (0, Time.time - hideAboutTime) * 4;
 			GUI.Window (3, modalWindowRect, AboutWindow, string.Empty);
 			GUI.BringWindowToFront (3);

          
@@ 289,7 291,7 @@ public class PuzzleTester : MonoBehaviou
 	}
 
 	void StatesGUI () {
-		Rect area = cam.pixelRect.FlipY ();
+		Rect area = cam.pixelRect.ToPoints ().FlipY ();
 		GUILayout.BeginArea (area);
 		area.position = Vector2.zero;
 		int spacing = kSpacing;

          
@@ 318,9 320,9 @@ public class PuzzleTester : MonoBehaviou
 				int actionCount = actionsPerNode[nodeIndex].Count;
 
 				Vector3 nodePosition = nodeFront.transform.position - Vector3.up * 0.2f;
-				Vector2 pos = cam.WorldToScreenPoint (nodePosition);
-				pos.y = cam.pixelRect.height - pos.y;
-				pos -= cam.pixelRect.min;
+				Vector2 pos = cam.WorldToScreenPoint (nodePosition) / RetinaHandler.scale;
+				pos.y = cam.pixelRect.ToPoints ().height - pos.y;
+				pos -= cam.pixelRect.ToPoints ().min;
 
 				GUI.color = new Color (1, 1, 1, 0.7f);
 				Rect rect = new Rect (pos.x - 60, pos.y, 120, 24 + kButtonHeight * actionCount);

          
@@ 517,7 519,7 @@ public class PuzzleTester : MonoBehaviou
 ", "HelpText");
 			GUILayout.BeginHorizontal ();
 			{
-				GUILayout.BeginVertical (GUILayout.MaxWidth (Screen.width));
+				GUILayout.BeginVertical (GUILayout.MaxWidth (RetinaHandler.width));
 				{
 					GUILayout.Label ("Node Elements");
 					ShowElements (puzzleFrontPrefab.nodePrefab.elements);

          
@@ 527,7 529,7 @@ public class PuzzleTester : MonoBehaviou
 
 				GUILayout.Space (20);
 
-				GUILayout.BeginVertical (GUILayout.MaxWidth (Screen.width));
+				GUILayout.BeginVertical (GUILayout.MaxWidth (RetinaHandler.width));
 				{
 					GUILayout.Label ("Edge Elements");
 					ShowElements (puzzleFrontPrefab.edgePrefab.elements);

          
A => Assets/Frontend/RetinaHandler.cs +40 -0
@@ 0,0 1,40 @@ 
+/*
+ * Copyright (c) 2021 Rune Skovbo Johansen
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+using UnityEngine;
+
+public class RetinaHandler : MonoBehaviour {
+
+	public static float width { get { return m_Width; } }
+	public static float height { get { return m_Height; } }
+	public static float scale { get { return m_Scale; } }
+
+	static float m_Width;
+	static float m_Height;
+	static float m_Scale;
+
+	public static void SetGUIMatrix () {
+		GUI.matrix = Matrix4x4.TRS (
+			Vector3.zero,
+			Quaternion.identity,
+			new Vector3 (m_Scale, m_Scale, 1f));
+	}
+
+    void Update () {
+		// Note we can't use UnityEditorUtility.pixelsPerPoint as it
+		// seems to not be consistent for different event types.
+#if UNITY_EDITOR
+		m_Scale = Screen.width > 1920 ? 2f : 1f;
+#else
+		m_Scale = Mathf.Round (Screen.currentResolution.width / Display.main.systemWidth);
+#endif
+
+		m_Width = Screen.width / scale;
+		m_Height = Screen.height / scale;
+	}
+}

          
A => Assets/Frontend/RetinaHandler.cs.meta +11 -0
@@ 0,0 1,11 @@ 
+fileFormatVersion: 2
+guid: a741bb458dd97433b955157dca5a74e3
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: -1000
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

          
M Assets/Scenes/Main.unity +225 -109
@@ 1,19 1,19 @@ 
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
 --- !u!29 &1
-SceneSettings:
+OcclusionCullingSettings:
   m_ObjectHideFlags: 0
-  m_PVSData: 
-  m_PVSObjectsArray: []
-  m_PVSPortalsArray: []
+  serializedVersion: 2
   m_OcclusionBakeSettings:
     smallestOccluder: 5
     smallestHole: 0.25
     backfaceThreshold: 100
+  m_SceneGUID: 00000000000000000000000000000000
+  m_OcclusionCullingData: {fileID: 0}
 --- !u!104 &2
 RenderSettings:
   m_ObjectHideFlags: 0
-  serializedVersion: 6
+  serializedVersion: 9
   m_Fog: 0
   m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
   m_FogMode: 3

          
@@ 25,6 25,7 @@ RenderSettings:
   m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1}
   m_AmbientIntensity: 1
   m_AmbientMode: 3
+  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
   m_SkyboxMaterial: {fileID: 0}
   m_HaloStrength: 0.5
   m_FlareStrength: 1

          
@@ 37,49 38,71 @@ RenderSettings:
   m_ReflectionIntensity: 1
   m_CustomReflection: {fileID: 0}
   m_Sun: {fileID: 0}
+  m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
+  m_UseRadianceAmbientProbe: 0
 --- !u!157 &4
 LightmapSettings:
   m_ObjectHideFlags: 0
-  serializedVersion: 6
+  serializedVersion: 11
   m_GIWorkflowMode: 1
-  m_LightmapsMode: 1
   m_GISettings:
     serializedVersion: 2
     m_BounceScale: 1
     m_IndirectOutputScale: 1
     m_AlbedoBoost: 1
-    m_TemporalCoherenceThreshold: 1
     m_EnvironmentLightingMode: 0
     m_EnableBakedLightmaps: 1
     m_EnableRealtimeLightmaps: 0
   m_LightmapEditorSettings:
-    serializedVersion: 3
+    serializedVersion: 10
     m_Resolution: 1
     m_BakeResolution: 50
-    m_TextureWidth: 1024
-    m_TextureHeight: 1024
+    m_AtlasSize: 1024
+    m_AO: 0
     m_AOMaxDistance: 1
+    m_CompAOExponent: 0
+    m_CompAOExponentDirect: 0
     m_Padding: 2
-    m_CompAOExponent: 0
     m_LightmapParameters: {fileID: 0}
+    m_LightmapsBakeMode: 1
     m_TextureCompression: 0
     m_FinalGather: 0
+    m_FinalGatherFiltering: 1
     m_FinalGatherRayCount: 1024
     m_ReflectionCompression: 2
+    m_MixedBakeMode: 1
+    m_BakeBackend: 0
+    m_PVRSampling: 1
+    m_PVRDirectSampleCount: 32
+    m_PVRSampleCount: 500
+    m_PVRBounces: 2
+    m_PVRFilterTypeDirect: 0
+    m_PVRFilterTypeIndirect: 0
+    m_PVRFilterTypeAO: 0
+    m_PVRFilteringMode: 0
+    m_PVRCulling: 1
+    m_PVRFilteringGaussRadiusDirect: 1
+    m_PVRFilteringGaussRadiusIndirect: 5
+    m_PVRFilteringGaussRadiusAO: 2
+    m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+    m_PVRFilteringAtrousPositionSigmaIndirect: 2
+    m_PVRFilteringAtrousPositionSigmaAO: 1
+    m_ShowResolutionOverlay: 1
   m_LightingDataAsset: {fileID: 0}
-  m_RuntimeCPUUsage: 25
+  m_UseShadowmask: 0
 --- !u!1 &5
 GameObject:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
   m_Component:
-  - 4: {fileID: 6}
-  - 20: {fileID: 7}
-  - 81: {fileID: 8}
-  - 114: {fileID: 11}
-  - 114: {fileID: 13}
+  - component: {fileID: 6}
+  - component: {fileID: 7}
+  - component: {fileID: 8}
+  - component: {fileID: 11}
+  - component: {fileID: 13}
   m_Layer: 0
   m_Name: Main Camera
   m_TagString: MainCamera

          
@@ 90,8 113,9 @@ GameObject:
 --- !u!4 &6
 Transform:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 5}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: -10}

          
@@ 100,16 124,23 @@ Transform:
   - {fileID: 1745703065}
   m_Father: {fileID: 0}
   m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!20 &7
 Camera:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 5}
   m_Enabled: 1
   serializedVersion: 2
   m_ClearFlags: 1
   m_BackGroundColor: {r: 0.5300605, g: 0.67541033, b: 0.83823526, a: 0.019607844}
+  m_projectionMatrixMode: 1
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_GateFitMode: 2
+  m_FocalLength: 50
   m_NormalizedViewPortRect:
     serializedVersion: 2
     x: 0

          
@@ 130,22 161,26 @@ Camera:
   m_TargetDisplay: 0
   m_TargetEye: 3
   m_HDR: 0
+  m_AllowMSAA: 1
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
   m_OcclusionCulling: 1
   m_StereoConvergence: 10
   m_StereoSeparation: 0.022
-  m_StereoMirrorMode: 0
 --- !u!81 &8
 AudioListener:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 5}
   m_Enabled: 1
 --- !u!114 &11
 MonoBehaviour:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 5}
   m_Enabled: 1
   m_EditorHideFlags: 0

          
@@ 153,7 188,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   skin: {fileID: 11400000, guid: 56be76b937f0946d6bddad5c2914fdc5, type: 2}
-  puzzleFrontPrefab: {fileID: 11400000, guid: 4c93ba615c525428bb18273d42c66b4b, type: 2}
+  puzzleFrontPrefab: {fileID: 11400000, guid: 4c93ba615c525428bb18273d42c66b4b, type: 3}
   icon: {fileID: 2800000, guid: 5dc2447ee60904ad5998ac51f91b4191, type: 3}
   graphDrawer: {fileID: 1888147560}
 --- !u!196 &12

          
@@ 162,22 197,28 @@ NavMeshSettings:
   m_ObjectHideFlags: 0
   m_BuildSettings:
     serializedVersion: 2
+    agentTypeID: 0
     agentRadius: 0.5
     agentHeight: 2
     agentSlope: 45
     agentClimb: 0.4
     ledgeDropHeight: 0
     maxJumpAcrossDistance: 0
+    minRegionArea: 2
+    manualCellSize: 0
+    cellSize: 0.16666666
+    manualTileSize: 0
+    tileSize: 256
     accuratePlacement: 0
-    minRegionArea: 2
-    cellSize: 0.16666666
-    manualCellSize: 0
+    debug:
+      m_Flags: 0
   m_NavMeshData: {fileID: 0}
 --- !u!114 &13
 MonoBehaviour:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 5}
   m_Enabled: 1
   m_EditorHideFlags: 0

          
@@ 189,12 230,14 @@ MonoBehaviour:
 --- !u!1 &689354326
 GameObject:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
   m_Component:
-  - 4: {fileID: 689354328}
-  - 114: {fileID: 689354327}
+  - component: {fileID: 689354328}
+  - component: {fileID: 689354327}
+  - component: {fileID: 689354329}
   m_Layer: 0
   m_Name: Manager
   m_TagString: Untagged

          
@@ 205,8 248,9 @@ GameObject:
 --- !u!114 &689354327
 MonoBehaviour:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 689354326}
   m_Enabled: 1
   m_EditorHideFlags: 0

          
@@ 219,8 263,9 @@ MonoBehaviour:
 --- !u!4 &689354328
 Transform:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 689354326}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}

          
@@ 228,17 273,31 @@ Transform:
   m_Children: []
   m_Father: {fileID: 0}
   m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &689354329
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 689354326}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: a741bb458dd97433b955157dca5a74e3, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1 &1745703064
 GameObject:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
   m_Component:
-  - 4: {fileID: 1745703065}
-  - 33: {fileID: 1745703068}
-  - 64: {fileID: 1745703067}
-  - 23: {fileID: 1745703066}
+  - component: {fileID: 1745703065}
+  - component: {fileID: 1745703068}
+  - component: {fileID: 1745703067}
+  - component: {fileID: 1745703066}
   m_Layer: 0
   m_Name: Background
   m_TagString: Untagged

          
@@ 249,8 308,9 @@ GameObject:
 --- !u!4 &1745703065
 Transform:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1745703064}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 20}

          
@@ 258,62 318,78 @@ Transform:
   m_Children: []
   m_Father: {fileID: 6}
   m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!23 &1745703066
 MeshRenderer:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1745703064}
   m_Enabled: 1
   m_CastShadows: 1
   m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 0
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
   m_Materials:
   - {fileID: 2100000, guid: 79c96057a62c44aa2acf6719b92b396b, type: 2}
-  m_SubsetIndices: 
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
   m_StaticBatchRoot: {fileID: 0}
-  m_UseLightProbes: 0
-  m_ReflectionProbeUsage: 1
   m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
   m_ScaleInLightmap: 1
   m_PreserveUVs: 0
   m_IgnoreNormalsForChartDetection: 0
   m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 3
   m_MinimumChartSize: 4
   m_AutoUVMaxDistance: 0.5
   m_AutoUVMaxAngle: 89
   m_LightmapParameters: {fileID: 0}
   m_SortingLayerID: 0
+  m_SortingLayer: 0
   m_SortingOrder: 0
 --- !u!64 &1745703067
 MeshCollider:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1745703064}
   m_Material: {fileID: 0}
   m_IsTrigger: 0
   m_Enabled: 1
-  serializedVersion: 2
+  serializedVersion: 3
   m_Convex: 0
+  m_CookingOptions: 14
   m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
 --- !u!33 &1745703068
 MeshFilter:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1745703064}
   m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
 --- !u!1 &1804053468
 GameObject:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
   m_Component:
-  - 4: {fileID: 1804053472}
-  - 33: {fileID: 1804053471}
-  - 64: {fileID: 1804053470}
-  - 23: {fileID: 1804053469}
+  - component: {fileID: 1804053472}
+  - component: {fileID: 1804053471}
+  - component: {fileID: 1804053470}
+  - component: {fileID: 1804053469}
   m_Layer: 8
   m_Name: Background
   m_TagString: Untagged

          
@@ 324,53 400,68 @@ GameObject:
 --- !u!23 &1804053469
 MeshRenderer:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1804053468}
   m_Enabled: 1
   m_CastShadows: 1
   m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_MotionVectors: 1
+  m_LightProbeUsage: 0
+  m_ReflectionProbeUsage: 1
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
   m_Materials:
   - {fileID: 2100000, guid: 79c96057a62c44aa2acf6719b92b396b, type: 2}
-  m_SubsetIndices: 
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
   m_StaticBatchRoot: {fileID: 0}
-  m_UseLightProbes: 0
-  m_ReflectionProbeUsage: 1
   m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
   m_ScaleInLightmap: 1
   m_PreserveUVs: 0
   m_IgnoreNormalsForChartDetection: 0
   m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 3
   m_MinimumChartSize: 4
   m_AutoUVMaxDistance: 0.5
   m_AutoUVMaxAngle: 89
   m_LightmapParameters: {fileID: 0}
   m_SortingLayerID: 0
+  m_SortingLayer: 0
   m_SortingOrder: 0
 --- !u!64 &1804053470
 MeshCollider:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1804053468}
   m_Material: {fileID: 0}
   m_IsTrigger: 0
   m_Enabled: 1
-  serializedVersion: 2
+  serializedVersion: 3
   m_Convex: 0
+  m_CookingOptions: 14
   m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
 --- !u!33 &1804053471
 MeshFilter:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1804053468}
   m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
 --- !u!4 &1804053472
 Transform:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1804053468}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 20}

          
@@ 378,17 469,19 @@ Transform:
   m_Children: []
   m_Father: {fileID: 1888147564}
   m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1888147559
 GameObject:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
   m_Component:
-  - 4: {fileID: 1888147564}
-  - 20: {fileID: 1888147563}
-  - 114: {fileID: 1888147560}
-  - 114: {fileID: 1888147561}
+  - component: {fileID: 1888147564}
+  - component: {fileID: 1888147563}
+  - component: {fileID: 1888147560}
+  - component: {fileID: 1888147561}
   m_Layer: 0
   m_Name: Graph Camera
   m_TagString: Untagged

          
@@ 399,8 492,9 @@ GameObject:
 --- !u!114 &1888147560
 MonoBehaviour:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1888147559}
   m_Enabled: 1
   m_EditorHideFlags: 0

          
@@ 412,8 506,9 @@ MonoBehaviour:
 --- !u!114 &1888147561
 MonoBehaviour:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1888147559}
   m_Enabled: 1
   m_EditorHideFlags: 0

          
@@ 425,13 520,19 @@ MonoBehaviour:
 --- !u!20 &1888147563
 Camera:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1888147559}
   m_Enabled: 1
   serializedVersion: 2
   m_ClearFlags: 1
   m_BackGroundColor: {r: 0.71323526, g: 0.71323526, b: 0.71323526, a: 0.019607844}
+  m_projectionMatrixMode: 1
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_GateFitMode: 2
+  m_FocalLength: 50
   m_NormalizedViewPortRect:
     serializedVersion: 2
     x: 0.5

          
@@ 452,15 553,18 @@ Camera:
   m_TargetDisplay: 0
   m_TargetEye: 3
   m_HDR: 0
+  m_AllowMSAA: 1
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
   m_OcclusionCulling: 1
   m_StereoConvergence: 10
   m_StereoSeparation: 0.022
-  m_StereoMirrorMode: 0
 --- !u!4 &1888147564
 Transform:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1888147559}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: -10}

          
@@ 469,15 573,17 @@ Transform:
   - {fileID: 1804053472}
   m_Father: {fileID: 0}
   m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1971430644
 GameObject:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
   m_Component:
-  - 4: {fileID: 1971430646}
-  - 20: {fileID: 1971430645}
+  - component: {fileID: 1971430646}
+  - component: {fileID: 1971430645}
   m_Layer: 0
   m_Name: Background Camera
   m_TagString: Untagged

          
@@ 488,13 594,19 @@ GameObject:
 --- !u!20 &1971430645
 Camera:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1971430644}
   m_Enabled: 1
   serializedVersion: 2
   m_ClearFlags: 2
   m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0.019607844}
+  m_projectionMatrixMode: 1
+  m_SensorSize: {x: 36, y: 24}
+  m_LensShift: {x: 0, y: 0}
+  m_GateFitMode: 2
+  m_FocalLength: 50
   m_NormalizedViewPortRect:
     serializedVersion: 2
     x: 0

          
@@ 515,15 627,18 @@ Camera:
   m_TargetDisplay: 0
   m_TargetEye: 3
   m_HDR: 0
+  m_AllowMSAA: 1
+  m_AllowDynamicResolution: 0
+  m_ForceIntoRT: 0
   m_OcclusionCulling: 1
   m_StereoConvergence: 10
   m_StereoSeparation: 0.022
-  m_StereoMirrorMode: 0
 --- !u!4 &1971430646
 Transform:
   m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1971430644}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: -10}

          
@@ 531,3 646,4 @@ Transform:
   m_Children: []
   m_Father: {fileID: 0}
   m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

          
M ProjectSettings/ProjectSettings.asset +3 -3
@@ 42,8 42,8 @@ PlayerSettings:
   m_SplashScreenLogos: []
   m_VirtualRealitySplashScreen: {fileID: 0}
   m_HolographicTrackingLossScreen: {fileID: 0}
-  defaultScreenWidth: 1280
-  defaultScreenHeight: 720
+  defaultScreenWidth: 1800
+  defaultScreenHeight: 1000
   defaultScreenWidthWeb: 600
   defaultScreenHeightWeb: 450
   m_StereoRenderingPath: 0

          
@@ 67,7 67,7 @@ PlayerSettings:
   androidRenderOutsideSafeArea: 0
   androidBlitType: 0
   defaultIsNativeResolution: 1
-  macRetinaSupport: 0
+  macRetinaSupport: 1
   runInBackground: 0
   captureSingleScreen: 0
   muteOtherAudioSources: 0