示例#1
0
        public IEnumerator CanUnloadAssetReference_WithAddressables()
        {
            yield return(Init());

            AsyncOperationHandle handle = m_Addressables.Instantiate(AssetReferenceObjectKey);

            yield return(handle);

            Assert.IsNotNull(handle.Result as GameObject);
            AssetReferenceTestBehavior behavior =
                (handle.Result as GameObject).GetComponent <AssetReferenceTestBehavior>();
            AsyncOperationHandle <GameObject> assetRefHandle = m_Addressables.Instantiate(behavior.Reference);

            yield return(assetRefHandle);

            Assert.IsNotNull(assetRefHandle.Result);

            string name = assetRefHandle.Result.name;

            Assert.IsNotNull(GameObject.Find(name));

            m_Addressables.ReleaseInstance(assetRefHandle.Result);
            yield return(null);

            Assert.IsNull(GameObject.Find(name));

            handle.Release();
        }
示例#2
0
    static public void Setup(string testType, string pathFormat, string suffix)
    {
#if UNITY_EDITOR
        var activeScenePath = EditorSceneManager.GetActiveScene().path;
        var RootFolder      = string.Format(pathFormat, testType, suffix);

        Directory.CreateDirectory(RootFolder);

        var settings = AddressableAssetSettings.Create(RootFolder + "/Settings", "AddressableAssetSettings.Tests", false, true);
        var group    = settings.FindGroup("TestStuff" + suffix);
        if (group == null)
        {
            group = settings.CreateGroup("TestStuff" + suffix, true, false, false, null, typeof(BundledAssetGroupSchema));
        }
        settings.DefaultGroup = group;
        AssetDatabase.StartAssetEditing();
        for (int i = 0; i < kPrefabCount; i++)
        {
            var guid  = CreateAsset(RootFolder + "/test" + i + suffix + ".prefab", "testPrefab" + i);
            var entry = settings.CreateOrMoveEntry(guid, group, false, false);
            entry.address = Path.GetFileNameWithoutExtension(entry.AssetPath);

            entry.SetLabel(GetPrefabLabel(suffix), true, false);
            entry.SetLabel(GetPrefabAlternatingLabel(suffix, i), true, false);
            entry.SetLabel(GetPrefabUniqueLabel(suffix, i), true, false);
        }
#if ENABLE_SCENE_TESTS
        for (int i = 0; i < kSceneCount; i++)
        {
            var scene = EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects, NewSceneMode.Single);
            EditorSceneManager.SaveScene(scene, RootFolder + "/test_scene" + i + suffix + ".unity");
            var guid  = AssetDatabase.AssetPathToGUID(scene.path);
            var entry = settings.CreateOrMoveEntry(guid, group, false, false);
            entry.address = Path.GetFileNameWithoutExtension(entry.AssetPath);
        }
#endif
        string     assetRefGuid = CreateAsset(RootFolder + "/testIsReference.prefab", "IsReference");
        GameObject go           = new GameObject("AssetReferenceBehavior");
        AssetReferenceTestBehavior aRefTestBehavior = go.AddComponent <AssetReferenceTestBehavior>();
        aRefTestBehavior.Reference      = settings.CreateAssetReference(assetRefGuid);
        aRefTestBehavior.LabelReference = new AssetLabelReference()
        {
            labelString = settings.labelTable.labelNames[0]
        };

        string hasBehaviorPath = RootFolder + "/AssetReferenceBehavior.prefab";
        PrefabUtility.SaveAsPrefabAsset(go, hasBehaviorPath);
        settings.CreateOrMoveEntry(AssetDatabase.AssetPathToGUID(hasBehaviorPath), group, false, false);

        AssetDatabase.StopAssetEditing();
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);

        RunBuilder(settings, testType, suffix);

#if ENABLE_SCENE_TESTS
        EditorSceneManager.OpenScene(activeScenePath, OpenSceneMode.Single);
#endif
#endif
    }
示例#3
0
        public IEnumerator RuntimeKeyIsValid_ReturnsFalseForInValidKeys()
        {
            yield return(Init());

            AsyncOperationHandle handle = m_Addressables.Instantiate(AssetReferenceObjectKey);

            yield return(handle);

            Assert.IsNotNull(handle.Result as GameObject);
            AssetReferenceTestBehavior behavior =
                (handle.Result as GameObject).GetComponent <AssetReferenceTestBehavior>();

            Assert.IsFalse((behavior.InValidAssetReference as IKeyEvaluator).RuntimeKeyIsValid());
            Assert.IsFalse((behavior.InvalidLabelReference as IKeyEvaluator).RuntimeKeyIsValid());

            handle.Release();
        }
        public IEnumerator CanloadAssetReferenceSubObject()
        {
            yield return(Init());

            var handle = m_Addressables.InstantiateAsync(AssetReferenceObjectKey);

            yield return(handle);

            Assert.IsNotNull(handle.Result);
            AssetReferenceTestBehavior behavior = handle.Result.GetComponent <AssetReferenceTestBehavior>();

            AsyncOperationHandle <Object> assetRefHandle = m_Addressables.LoadAssetAsync <Object>(behavior.ReferenceWithSubObject);

            yield return(assetRefHandle);

            Assert.IsNotNull(assetRefHandle.Result);
            m_Addressables.Release(assetRefHandle);
            handle.Release();
        }
        internal override void Setup(AddressableAssetSettings settings, string tempAssetFolder)
        {
            AddressableAssetGroup assetReference = settings.CreateGroup("assetReferenceSamplesGroup", false, false, true,
                                                                        new List <AddressableAssetGroupSchema>(), typeof(BundledAssetGroupSchema));

            GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);
            AssetReferenceTestBehavior behavior = go.AddComponent <AssetReferenceTestBehavior>();

            string hasBehaviorPath = tempAssetFolder + "/AssetReferenceBehavior.prefab";

            string referencePath = tempAssetFolder + "/reference.prefab";
            string guid          = CreatePrefab(referencePath);

            behavior.Reference             = settings.CreateAssetReference(guid);
            behavior.AssetReferenceAddress = referencePath.Replace("\\", "/");

            PrefabUtility.SaveAsPrefabAsset(go, hasBehaviorPath);
            settings.CreateOrMoveEntry(AssetDatabase.AssetPathToGUID(hasBehaviorPath), assetReference, false, false).address = m_AssetReferenceObjectKey;
        }
        public IEnumerator Samples_GetAddressFromAssetReference_ReturnsCorrectAddress()
        {
            var savedImpl = UnityEngine.AddressableAssets.Addressables.m_AddressablesInstance;

            UnityEngine.AddressableAssets.Addressables.m_AddressablesInstance = m_Addressables;

            AsyncOperationHandle assetReferenceHandle = m_Addressables.InstantiateAsync(m_AssetReferenceObjectKey);

            yield return(assetReferenceHandle);

            Assert.IsNotNull(assetReferenceHandle.Result as GameObject);
            AssetReferenceTestBehavior behavior =
                (assetReferenceHandle.Result as GameObject).GetComponent <AssetReferenceTestBehavior>();

            string returnedAddress = AddressablesUtility.GetAddressFromAssetReference(behavior.Reference);

            Assert.AreEqual(behavior.AssetReferenceAddress, returnedAddress);

            m_Addressables.Release(assetReferenceHandle);
            UnityEngine.AddressableAssets.Addressables.m_AddressablesInstance = savedImpl;
        }
示例#7
0
    static public void Setup(string testType, string pathFormat, string suffix)
    {
#if UNITY_EDITOR
        bool currentIgnoreState = LogAssert.ignoreFailingMessages;
        LogAssert.ignoreFailingMessages = true;

        var RootFolder = string.Format(pathFormat, testType, suffix);

        Directory.CreateDirectory(RootFolder);

        var settings = AddressableAssetSettings.Create(RootFolder + "/Settings", "AddressableAssetSettings.Tests", false, true);
        settings.MaxConcurrentWebRequests = kMaxWebRequestCount;
        var group = settings.FindGroup("TestStuff" + suffix);

        if (group == null)
        {
            group = settings.CreateGroup("TestStuff" + suffix, true, false, false, null, typeof(BundledAssetGroupSchema));
        }
        group.GetSchema <BundledAssetGroupSchema>().BundleNaming = BundledAssetGroupSchema.BundleNamingStyle.OnlyHash;
        settings.DefaultGroup = group;
        for (int i = 0; i < kPrefabCount; i++)
        {
            var guid  = CreateAsset(RootFolder + "/test" + i + suffix + ".prefab", "testPrefab" + i);
            var entry = settings.CreateOrMoveEntry(guid, group, false, false);
            entry.address = Path.GetFileNameWithoutExtension(entry.AssetPath);

            entry.SetLabel(GetPrefabLabel(suffix), true, true);
            entry.SetLabel(GetPrefabAlternatingLabel(suffix, i), true, true);
            entry.SetLabel(GetPrefabUniqueLabel(suffix, i), true, true);
        }

        var texture = new Texture2D(32, 32);
        var data    = ImageConversion.EncodeToPNG(texture);
        UnityEngine.Object.DestroyImmediate(texture);
        AssetDatabase.GenerateUniqueAssetPath(RootFolder);
        var spritePath = RootFolder + "/sprite.png";
        File.WriteAllBytes(spritePath, data);

        AssetDatabase.ImportAsset(spritePath, ImportAssetOptions.ForceSynchronousImport | ImportAssetOptions.ForceUpdate);

        var spriteGuid = AssetDatabase.AssetPathToGUID(spritePath);
        var importer   = (TextureImporter)AssetImporter.GetAtPath(spritePath);
        importer.textureType      = TextureImporterType.Sprite;
        importer.spriteImportMode = SpriteImportMode.Multiple;
        importer.spritesheet      = new SpriteMetaData[] { new SpriteMetaData()
                                                           {
                                                               name = "topleft", pivot = Vector2.zero, rect = new Rect(0, 0, 16, 16)
                                                           },
                                                           new SpriteMetaData()
                                                           {
                                                               name = "botright", pivot = Vector2.zero, rect = new Rect(16, 16, 16, 16)
                                                           } };
        importer.SaveAndReimport();

        var spriteEntry = settings.CreateOrMoveEntry(AssetDatabase.AssetPathToGUID(spritePath), group, false, false);
        spriteEntry.address = "sprite";

        var so  = ScriptableObject.CreateInstance <UnityEngine.AddressableAssets.Tests.TestObject>();
        var sub = ScriptableObject.CreateInstance <UnityEngine.AddressableAssets.Tests.TestObject>();
        sub.name = "sub-shown";
        var sub2 = ScriptableObject.CreateInstance <UnityEngine.AddressableAssets.Tests.TestObject>();
        sub2.hideFlags |= HideFlags.HideInHierarchy;
        sub2.name       = "sub2-hidden";
        so.name         = "main";
        AssetDatabase.CreateAsset(so, RootFolder + "/assetWithSubObjects.asset");
        AssetDatabase.AddObjectToAsset(sub, RootFolder + "/assetWithSubObjects.asset");
        AssetDatabase.AddObjectToAsset(sub2, RootFolder + "/assetWithSubObjects.asset");
        AssetDatabase.ImportAsset(RootFolder + "/assetWithSubObjects.asset", ImportAssetOptions.ForceSynchronousImport | ImportAssetOptions.ForceUpdate);
        var        assetWithSubObjectsGUID = AssetDatabase.AssetPathToGUID(RootFolder + "/assetWithSubObjects.asset");
        string     assetRefGuid            = CreateAsset(RootFolder + "/testIsReference.prefab", "IsReference");
        GameObject go = new GameObject("AssetReferenceBehavior");
        AssetReferenceTestBehavior aRefTestBehavior = go.AddComponent <AssetReferenceTestBehavior>();
        settings.CreateOrMoveEntry(assetWithSubObjectsGUID, settings.DefaultGroup).address = "assetWithSubObjects";
        aRefTestBehavior.Reference = settings.CreateAssetReference(assetRefGuid);
        aRefTestBehavior.ReferenceWithSubObject = settings.CreateAssetReference(assetWithSubObjectsGUID);
        aRefTestBehavior.ReferenceWithSubObject.SubObjectName = "sub-shown";
        aRefTestBehavior.LabelReference = new AssetLabelReference()
        {
            labelString = settings.labelTable.labelNames[0]
        };

        string hasBehaviorPath = RootFolder + "/AssetReferenceBehavior.prefab";
        PrefabUtility.SaveAsPrefabAsset(go, hasBehaviorPath);
        settings.CreateOrMoveEntry(AssetDatabase.AssetPathToGUID(hasBehaviorPath), group, false, false);
        //AssetDatabase.StopAssetEditing();
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);

        RunBuilder(settings, testType, suffix);
        LogAssert.ignoreFailingMessages = currentIgnoreState;
#endif
    }
    static public void Setup(string testType, string pathFormat, string suffix)
    {
        try
        {
#if UNITY_EDITOR
            var activeScenePath = EditorSceneManager.GetActiveScene().path;
            var RootFolder      = string.Format(pathFormat, testType, suffix);

            Directory.CreateDirectory(RootFolder);

            var settings = AddressableAssetSettings.Create(RootFolder + "/Settings", "AddressableAssetSettings.Tests", false, true);
            var group    = settings.FindGroup("TestStuff" + suffix);
            if (group == null)
            {
                group = settings.CreateGroup("TestStuff" + suffix, true, false, false, null, typeof(BundledAssetGroupSchema));
            }
            settings.DefaultGroup = group;
            AssetDatabase.StartAssetEditing();
            for (int i = 0; i < kPrefabCount; i++)
            {
                var guid  = CreateAsset(RootFolder + "/test" + i + suffix + ".prefab", "testPrefab" + i);
                var entry = settings.CreateOrMoveEntry(guid, group, false, false);
                entry.address = Path.GetFileNameWithoutExtension(entry.AssetPath);

                entry.SetLabel(GetPrefabLabel(suffix), true, false);
                entry.SetLabel(GetPrefabAlternatingLabel(suffix, i), true, false);
                entry.SetLabel(GetPrefabUniqueLabel(suffix, i), true, false);
            }

#if ENABLE_SCENE_TESTS
            for (int i = 0; i < kSceneCount; i++)
            {
                var scene = EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects, NewSceneMode.Single);
                EditorSceneManager.SaveScene(scene, RootFolder + "/test_scene" + i + suffix + ".unity");
                var guid  = AssetDatabase.AssetPathToGUID(scene.path);
                var entry = settings.CreateOrMoveEntry(guid, group, false, false);
                entry.address = Path.GetFileNameWithoutExtension(entry.AssetPath);
            }
#endif
            string     assetRefGuid = CreateAsset(RootFolder + "/testIsReference.prefab", "IsReference");
            GameObject go           = new GameObject("AssetReferenceBehavior");
            AssetReferenceTestBehavior aRefTestBehavior = go.AddComponent <AssetReferenceTestBehavior>();
            aRefTestBehavior.Reference      = settings.CreateAssetReference(assetRefGuid);
            aRefTestBehavior.LabelReference = new AssetLabelReference()
            {
                labelString = settings.labelTable.labelNames[0]
            };

            string hasBehaviorPath = RootFolder + "/AssetReferenceBehavior.prefab";
            PrefabUtility.SaveAsPrefabAsset(go, hasBehaviorPath);
            settings.CreateOrMoveEntry(AssetDatabase.AssetPathToGUID(hasBehaviorPath), group, false, false);
            AssetDatabase.StopAssetEditing();
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);


            var texture = new Texture2D(32, 32);
            var data    = ImageConversion.EncodeToPNG(texture);
            UnityEngine.Object.DestroyImmediate(texture);
            AssetDatabase.GenerateUniqueAssetPath(RootFolder);
            var origPath   = "Assets/" + GUID.Generate() + ".png";
            var spritePath = RootFolder + "sprite.png";
            File.WriteAllBytes(spritePath, data);
            AssetDatabase.ImportAsset(origPath, ImportAssetOptions.ForceSynchronousImport | ImportAssetOptions.ForceUpdate);
            AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate | ImportAssetOptions.ForceSynchronousImport);
            AssetDatabase.MoveAsset(origPath, spritePath);
            AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate | ImportAssetOptions.ForceSynchronousImport);
            AssetDatabase.ImportAsset(spritePath, ImportAssetOptions.ForceSynchronousImport | ImportAssetOptions.ForceUpdate);

            var spriteGuid = AssetDatabase.AssetPathToGUID(spritePath);
            var importer   = AssetImporter.GetAtPath(spritePath) as TextureImporter;
            importer.textureType      = TextureImporterType.Sprite;
            importer.spriteImportMode = SpriteImportMode.Multiple;
            importer.spritesheet      = new SpriteMetaData[] { new SpriteMetaData()
                                                               {
                                                                   name = "topleft", pivot = Vector2.zero, rect = new Rect(0, 0, 16, 16)
                                                               },
                                                               new SpriteMetaData()
                                                               {
                                                                   name = "botright", pivot = Vector2.zero, rect = new Rect(16, 16, 16, 16)
                                                               } };
            importer.SaveAndReimport();
            AssetDatabase.ImportAsset(spritePath, ImportAssetOptions.ForceSynchronousImport | ImportAssetOptions.ForceUpdate);
            AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate | ImportAssetOptions.ForceSynchronousImport);

            var spriteEntry = settings.CreateOrMoveEntry(AssetDatabase.AssetPathToGUID(spritePath), group, false, false);
            spriteEntry.address = "sprite";


            RunBuilder(settings, testType, suffix);

#if ENABLE_SCENE_TESTS
            EditorSceneManager.OpenScene(activeScenePath, OpenSceneMode.Single);
#endif
#endif
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }
    }