Пример #1
0
        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));
        }
Пример #2
0
        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");
    }
Пример #6
0
        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);
        }
Пример #7
0
        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());
        }
Пример #8
0
    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;
        }
    }
Пример #9
0
        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
        }
Пример #11
0
        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));
                }
            }
        }
Пример #12
0
        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();
        }