public void ChangeSceneCacheOnInstancedPrefab()
        {
            //Initial setup
            const string DEST_PREFAB_PATH = "Assets/TestSceneCache.prefab";
            const string ASSETS_FOLDER    = "Assets/TestSceneCacheAssets";

            bool prefabCreated = SceneCachePlayerEditorUtility.CreateSceneCachePlayerAndPrefab(
                Path.GetFullPath(MeshSyncTestEditorConstants.CUBE_TEST_DATA_PATH), DEST_PREFAB_PATH, ASSETS_FOLDER,
                out SceneCachePlayer player, out GameObject prefab
                );

            Assert.IsTrue(prefabCreated);

            //Check the instanced prefab
            Assert.IsNotNull(player);
            Assert.IsTrue(player.gameObject.IsPrefabInstance());


            //Change
            string newSceneCacheFilePath = Path.GetFullPath(MeshSyncTestEditorConstants.SPHERE_TEST_DATA_PATH);

            SceneCachePlayerEditorUtility.ChangeSceneCacheFile(player, newSceneCacheFilePath);
            string convertedPath = newSceneCacheFilePath.Replace('\\', '/');

            Assert.IsTrue(player.IsSceneCacheOpened());
            Assert.AreEqual(convertedPath, player.GetSceneCacheFilePath());

            //Cleanup
            Object.DestroyImmediate(player.gameObject);
            DeleteSceneCachePlayerPrefab(prefab);
        }
Exemplo n.º 2
0
        public void ChangeSceneCacheOnGameObject()
        {
            //Initial setup
            SceneCachePlayer player = new GameObject("SceneCache").AddComponent <SceneCachePlayer>();

            Assert.IsFalse(player.IsSceneCacheOpened());

            //Change
            SceneCachePlayerEditorUtility.ChangeSceneCacheFile(player, Path.GetFullPath(MeshSyncTestEditorConstants.CUBE_TEST_DATA_PATH));
            Assert.IsTrue(player.IsSceneCacheOpened());
            Camera cam0   = player.GetComponentInChildren <Camera>();
            Light  light0 = player.GetComponentInChildren <Light>();

            SceneCachePlayerEditorUtility.ChangeSceneCacheFile(player, Path.GetFullPath(MeshSyncTestEditorConstants.SPHERE_TEST_DATA_PATH));
            Assert.IsTrue(player.IsSceneCacheOpened());
            Camera cam1   = player.GetComponentInChildren <Camera>();
            Light  light1 = player.GetComponentInChildren <Light>();

            Assert.IsNotNull(cam0);
            Assert.IsNotNull(light0);
            Assert.AreEqual(cam0, cam1);
            Assert.AreEqual(light0, light1);


            Object.DestroyImmediate(player.gameObject); //Cleanup
        }
        public void CopySceneCacheToStreamingAssets()
        {
            //Initial setup
            const string DEST_PREFAB_PATH    = "Assets/TestSceneCache.prefab";
            const string ASSETS_FOLDER       = "Assets/TestSceneCacheAssets";
            string       destFolder          = Path.Combine(Application.streamingAssetsPath, "TestRunner");
            string       streamingAssetsPath = Path.Combine(destFolder, "Copied.sc");

            bool prefabCreated = SceneCachePlayerEditorUtility.CreateSceneCachePlayerAndPrefab(
                Path.GetFullPath(MeshSyncTestEditorConstants.CUBE_TEST_DATA_PATH), DEST_PREFAB_PATH, ASSETS_FOLDER,
                out SceneCachePlayer player, out GameObject prefab
                );

            Assert.IsTrue(prefabCreated);

            //Copy
            Directory.CreateDirectory(destFolder);
            File.Copy(player.GetSceneCacheFilePath(), streamingAssetsPath);
            Assert.IsTrue(File.Exists(streamingAssetsPath));
            AssetDatabase.Refresh();
            SceneCachePlayerEditorUtility.ChangeSceneCacheFile(player, streamingAssetsPath);
            string convertedPath = streamingAssetsPath.Replace('\\', '/');

            Assert.AreEqual(convertedPath, player.GetSceneCacheFilePath());

            //Cleanup
            Object.DestroyImmediate(player.gameObject);
            DeleteSceneCachePlayerPrefab(prefab);

            AssetDatabase.DeleteAsset(AssetUtility.NormalizeAssetPath(streamingAssetsPath));
            AssetDatabase.DeleteAsset(AssetUtility.NormalizeAssetPath(destFolder));
            AssetDatabase.Refresh();
        }
        private static SceneCachePlayer CreateTestSceneCachePlayer()
        {
            GameObject       sceneCacheGo     = new GameObject();
            SceneCachePlayer sceneCachePlayer = sceneCacheGo.AddComponent <SceneCachePlayer>();

            SceneCachePlayerEditorUtility.ChangeSceneCacheFile(sceneCachePlayer, Path.GetFullPath(MeshSyncTestEditorConstants.CUBE_TEST_DATA_PATH));
            return(sceneCachePlayer);
        }
Exemplo n.º 5
0
        public IEnumerator CreatePlayableAsset()
        {
            EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects);

            //Add director
            GameObject       directorGo = new GameObject("Director");
            PlayableDirector director   = directorGo.AddComponent <PlayableDirector>();

            //Setup scene cache
            GameObject       sceneCacheGo     = new GameObject();
            SceneCachePlayer sceneCachePlayer = sceneCacheGo.AddComponent <SceneCachePlayer>();

            Assert.IsFalse(sceneCachePlayer.IsSceneCacheOpened());
            SceneCachePlayerEditorUtility.ChangeSceneCacheFile(sceneCachePlayer, Path.GetFullPath(MeshSyncTestEditorConstants.CUBE_TEST_DATA_PATH));


            //Create timeline asset
            TimelineAsset asset = ScriptableObject.CreateInstance <TimelineAsset>();

            director.playableAsset = asset;

            //Create PlayableAsset/Track/ etc
            SceneCachePlayableAsset playableAsset   = ScriptableObject.CreateInstance <SceneCachePlayableAsset>();
            SceneCacheTrack         sceneCacheTrack = asset.CreateTrack <SceneCacheTrack>(null, "TestSceneCacheTrack");
            TimelineClip            clip            = sceneCacheTrack.CreateDefaultClip();

            clip.asset = playableAsset;
            director.SetReferenceValue(playableAsset.GetSceneCachePlayerRef().exposedName, sceneCachePlayer);


            //Select gameObject and open Timeline Window. This will trigger the TimelineWindow's update etc.
            EditorApplication.ExecuteMenuItem("Window/Sequencing/Timeline");
            Selection.activeTransform = directorGo.transform;
            yield return(null);

            director.time = 0;
            yield return(null);

            Assert.AreEqual(0, sceneCachePlayer.GetRequestedNormalizedTime());
            double timePerFrame = 1.0f / sceneCacheTrack.timelineAsset.editorSettings.fps;

            double directorTime = clip.start + clip.duration - timePerFrame;

            SetDirectorTime(director, directorTime);
            yield return(null);

            //Check clipData and curve
            SceneCacheClipData clipData = playableAsset.GetBoundClipData();

            Assert.IsNotNull(clipData);
            AnimationCurve curve = clipData.GetAnimationCurve();

            Assert.IsNotNull(curve);
            float normalizedTime = curve.Evaluate((float)directorTime);


            Assert.AreEqual(normalizedTime, sceneCachePlayer.GetRequestedNormalizedTime());
        }
        public void ChangeSceneCacheOnGameObject()
        {
            //Initial setup
            GameObject       go     = new GameObject();
            SceneCachePlayer player = go.AddComponent <SceneCachePlayer>();

            Assert.IsFalse(player.IsSceneCacheOpened());

            //Change
            SceneCachePlayerEditorUtility.ChangeSceneCacheFile(player, Path.GetFullPath(MeshSyncTestEditorConstants.CUBE_TEST_DATA_PATH));
            Assert.IsTrue(player.IsSceneCacheOpened());
            SceneCachePlayerEditorUtility.ChangeSceneCacheFile(player, Path.GetFullPath(MeshSyncTestEditorConstants.SPHERE_TEST_DATA_PATH));
            Assert.IsTrue(player.IsSceneCacheOpened());

            //Cleanup
            Object.DestroyImmediate(go);
        }
Exemplo n.º 7
0
        public IEnumerator ReloadSceneCache()
        {
            SceneCachePlayer player = new GameObject("SceneCache").AddComponent <SceneCachePlayer>();

            //Set and reload
            SceneCachePlayerEditorUtility.ChangeSceneCacheFile(player, Path.GetFullPath(MeshSyncTestEditorConstants.CUBE_TEST_DATA_PATH));
            Assert.IsTrue(player.IsSceneCacheOpened());
            yield return(null);

            SceneCachePlayerEditorUtility.ReloadSceneCacheFile(player);
            Assert.IsTrue(player.transform.childCount > 0);
            Assert.IsTrue(player.IsSceneCacheOpened());

            yield return(null);


            Object.DestroyImmediate(player.gameObject); //Cleanup
        }
Exemplo n.º 8
0
//----------------------------------------------------------------------------------------------------------------------

        static TestDataComponents ChangeSceneCacheFileAndVerify(SceneCachePlayer player, string scPath)
        {
            SceneCachePlayerEditorUtility.ChangeSceneCacheFile(player, scPath);
            string savedScFilePath = player.GetSceneCacheFilePath();

            Assert.AreEqual(AssetEditorUtility.NormalizePath(scPath), savedScFilePath);
            Assert.IsTrue(AssetEditorUtility.IsPathNormalized(savedScFilePath), $"{savedScFilePath} is not normalized");
            Assert.IsTrue(player.transform.childCount > 0);

            TestDataComponents ret = new TestDataComponents(
                player.GetComponentInChildren <Camera>(),
                player.GetComponentInChildren <Light>(),
                player.GetComponentInChildren <MeshRenderer>()
                );

            Assert.IsNotNull(ret.cam);
            Assert.IsNotNull(ret.light);
            Assert.IsNotNull(ret.meshRenderer);
            return(ret);
        }