public void GetOrCreate_And_Dispose_Works() { var cache = new CameraCache <int>(); // Create the camera var camera = cache.GetOrCreate(0, 0); Assert.IsNotNull(camera); // Get the same camera var sameCamera = cache.GetOrCreate(0, 0); Assert.IsNotNull(sameCamera); Assert.True(ReferenceEquals(camera, sameCamera)); Assert.AreEqual(camera.GetInstanceID(), sameCamera.GetInstanceID()); // Get another camera var otherCamera = cache.GetOrCreate(1, 0); Assert.IsNotNull(otherCamera); Assert.False(ReferenceEquals(camera, otherCamera)); Assert.AreNotEqual(camera.GetInstanceID(), otherCamera.GetInstanceID()); // Clear the cameras cache.Dispose(); // Assert the cameras are destroyed on the C++ side Assert.True(camera.Equals(null)); Assert.True(sameCamera.Equals(null)); Assert.True(otherCamera.Equals(null)); }
public void GetOrCreate_And_ClearCamerasUnusedFor_Works() { using (var cache = new CameraCache <int>()) { // Create cameras var cameras = new Camera[5]; for (var i = 0; i < cameras.Length; ++i) { cameras[i] = cache.GetOrCreate(i, i); Assert.IsNotNull(cameras[i]); } var frameCount = cameras.Length - 1; for (var frameWindow = frameCount; frameWindow >= 0; --frameWindow) { // Clear the cameras older than i frames cache.ClearCamerasUnusedFor(frameWindow, frameCount); // Assert the cameras are destroyed on the C++ side if they are unused // since i frames or more var cameraAreDestroyedBeforeFrameCount = frameCount - frameWindow; for (var j = 0; j < cameraAreDestroyedBeforeFrameCount; ++j) { Assert.True(cameras[j].Equals(null), $"Camera {j} is unused since {frameWindow} frames and must be destroyed."); } for (var j = cameraAreDestroyedBeforeFrameCount; j < cameras.Length; ++j) { Assert.False(cameras[j].Equals(null), $"Camera {j} is used since {frameWindow} frames and must be alive."); } } } }
public void ManualMainCameraRefresh() { TestUtils.CreateMainCamera(); var unused = CameraCache.Main; var secondMainCamera = TestUtils.CreateMainCamera(); CameraCache.Refresh(secondMainCamera); Assert.That(CameraCache.Main, Is.EqualTo(secondMainCamera)); }
public void ManualMainCameraRefreshGetFirstAfterDelete() { var mainCamera = TestUtils.CreateMainCamera(); var unused = CameraCache.Main; var secondMainCamera = TestUtils.CreateMainCamera(); CameraCache.Refresh(secondMainCamera); Object.DestroyImmediate(secondMainCamera.gameObject); Assert.That(CameraCache.Main, Is.EqualTo(mainCamera)); }
public void BackToMain() { foreach (var obj in FindObjectsOfType <DontDestroyOnLoad>()) { obj.DontDestroyOnLoadEnabled = false; } ARSetup.Reset(); CameraCache.Reset(); SceneManager.LoadScene("0_MainMenu"); }
public FollowTargetCalculator(Camera camera, Rect softRect, Rect hardRect, Vector3 trackedObjectOffset, float followSpeed) { Camera = camera; SoftRect = softRect; HardRect = hardRect; TrackedObjectOffset = trackedObjectOffset; FollowSpeed = followSpeed; _cameraCache = new CameraCache(camera); }
public void UsingDisposedObject_Throws() { var cache = new CameraCache <int>(); cache.Dispose(); Assert.Throws <System.ObjectDisposedException>(() => cache.GetOrCreate(0, 0)); Assert.Throws <System.ObjectDisposedException>(() => cache.ClearCamerasUnusedFor(0, 0)); Assert.Throws <System.ObjectDisposedException>(() => cache.Clear()); Assert.Throws <System.ObjectDisposedException>(() => cache.Dispose()); }
void Start() { var mainCamera = CameraCache.Refresh(Camera.main); if (mainCamera == null) { Debug.LogWarning("Could not find a valid \"MainCamera\"! Unable to update camera position."); } else { mainCamera.transform.position = Vector3.zero; } }
protected virtual void LoadScene(int sceneName) { Destroy(camera.transform.parent.gameObject); Destroy(cursor.gameObject); Destroy(input.gameObject); // Avoids the error that is caused by the absence of the camera in the scene. Camera cam = gameObject.AddComponent <Camera>(); cam.backgroundColor = Color.black; CameraCache.Refresh(cam); SceneManager.LoadScene(sceneName); }
protected virtual void LoadScene(string sceneName) { Destroy(camera.transform.parent.gameObject); Destroy(cursor.gameObject); Destroy(input.gameObject); // Avoids the error that is caused by the absence of the camera in the scene. Camera cam = gameObject.AddComponent <Camera> (); cam.backgroundColor = Color.black; CameraCache.Refresh(cam); #if UNITY_5_3 || UNITY_5_3_OR_NEWER SceneManager.LoadScene(sceneName); #else Application.LoadLevel(sceneName); #endif }
public void GetOrCreate_And_Clear_Works() { using (var cache = new CameraCache <int>()) { var cameras = new Camera[5]; for (var i = 0; i < cameras.Length; ++i) { cameras[i] = cache.GetOrCreate(i, 0); Assert.IsNotNull(cameras[i]); } // Clear the cameras cache.Clear(); // Assert the cameras are destroyed on the C++ side for (var i = 0; i < cameras.Length; ++i) { Assert.True(cameras[i].Equals(null)); } } }
protected override void ApplySettings() { if (Values[SceneSetting.AddMixedRealityCamera]) { if (CameraCache.Main != null) { DestroyImmediate(CameraCache.Main.gameObject.GetParentRoot()); } PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath <GameObject>(AssetDatabase.GUIDToAssetPath(CameraPrefabGUID))); } if (Values[SceneSetting.CameraToOrigin]) { var mainCamera = CameraCache.Refresh(Camera.main); if (mainCamera == null) { Debug.LogWarning("Could not find a valid \"MainCamera\"! Unable to update camera position."); } else { mainCamera.transform.position = Vector3.zero; } } if (Values[SceneSetting.AddInputSystem]) { var inputManager = FindObjectOfType <InputManager>(); if (inputManager != null) { DestroyImmediate(inputManager.gameObject); } var eventSystems = FindObjectsOfType <EventSystem>(); foreach (var eventSystem in eventSystems) { DestroyImmediate(eventSystem.gameObject); } var inputModules = FindObjectsOfType <StandaloneInputModule>(); foreach (var inputModule in inputModules) { DestroyImmediate(inputModule.gameObject); } PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath <GameObject>(AssetDatabase.GUIDToAssetPath(InputSystemPrefabGUID))); Values[SceneSetting.UpdateCanvases] = true; } if (Values[SceneSetting.UpdateCanvases]) { var focusManager = FindObjectOfType <FocusManager>(); if (focusManager != null) { FocusManager.Instance.UpdateCanvasEventSystems(); } var sceneCanvases = Resources.FindObjectsOfTypeAll <Canvas>(); foreach (Canvas canvas in sceneCanvases) { var helper = canvas.EnsureComponent <CanvasHelper>(); helper.Canvas = canvas; } } if (Values[SceneSetting.AddDefaultCursor]) { var cursors = FindObjectsOfType <BaseCursor>(); foreach (var cursor in cursors) { DestroyImmediate(cursor.gameObject.GetParentRoot()); } PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath <GameObject>(AssetDatabase.GUIDToAssetPath(DefaultCursorPrefabGUID))); FindObjectOfType <InputManager>().GetComponent <SimpleSinglePointerSelector>().Cursor = FindObjectOfType <BaseCursor>(); } EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene()); Close(); }