コード例 #1
0
        public void WhenSpriteWithAtlas_SpriteImportDataCreated(SpritePackerMode spriteMode, string spritePackingTag, bool hasReferencingSpriteAtlas, bool expectedPacked)
        {
            string sourceTexture = Path.Combine(kSourceTestAssetFolder, "SpriteTexture32x32.png");
            string destTexture   = Path.Combine(kTestAssetFolder, "SpriteTexture32x32.png");

            AssetDatabase.CopyAsset(sourceTexture, destTexture);
            TextureImporter importer = AssetImporter.GetAtPath(destTexture) as TextureImporter;

            importer.spritePackingTag = spritePackingTag;
            importer.SaveAndReimport();

            if (hasReferencingSpriteAtlas)
            {
                var sa            = new SpriteAtlas();
                var targetObjects = new UnityEngine.Object[] { AssetDatabase.LoadAssetAtPath <Texture>(destTexture) };
                sa.Add(targetObjects);
                string saPath = Path.Combine(kTestAssetFolder, "sa.spriteAtlas");
                AssetDatabase.CreateAsset(sa, saPath);
                AssetDatabase.Refresh();
            }

            GUID.TryParse(AssetDatabase.AssetPathToGUID(destTexture), out GUID spriteGUID);

            CalculateAssetDependencyData.TaskInput input = CreateDefaultInput();
            EditorSettings.spritePackerMode = spriteMode;
            SpriteAtlasUtility.PackAllAtlases(input.Target);
            input.Assets = new List <GUID>()
            {
                spriteGUID
            };
            CalculateAssetDependencyData.RunInternal(input, out CalculateAssetDependencyData.TaskOutput output);

            Assert.AreEqual(expectedPacked, output.AssetResults[0].spriteData.PackedSprite);
        }
コード例 #2
0
        public void WhenAssetDoesNotExist_AssetResultIsEmpty()
        {
            CalculateAssetDependencyData.TaskInput input = CreateDefaultInput();
            input.Assets = new List <GUID>()
            {
                GUID.Generate()
            };

            CalculateAssetDependencyData.RunInternal(input, out CalculateAssetDependencyData.TaskOutput output);

            Assert.IsNull(output.AssetResults[0].extendedData);
            Assert.AreEqual(0, output.AssetResults[0].assetInfo.includedObjects.Count);
        }
コード例 #3
0
        public void WhenObjectInfluencesReferencedObjectBuildTags_BuildUsageTagsAreAdded()
        {
            string testShaderPath = Path.Combine(kTestAssetFolder, "TestShader.shader");

            CreateTestShader(testShaderPath);
            Shader shader           = AssetDatabase.LoadAssetAtPath <Shader>(testShaderPath);
            string shaderGUIDString = AssetDatabase.AssetPathToGUID(testShaderPath);

            GUID.TryParse(shaderGUIDString, out GUID shaderGUID);

            // Create a material that points to the test shader asset
            Material mat     = new Material(shader);
            string   matPath = Path.Combine(kTestAssetFolder, "testmat.mat");

            AssetDatabase.CreateAsset(mat, matPath);
            string guidMatString = AssetDatabase.AssetPathToGUID(matPath);

            GUID.TryParse(guidMatString, out GUID matGUID);

            CalculateAssetDependencyData.TaskInput input = CreateDefaultInput();
            input.Assets = new List <GUID>()
            {
                matGUID
            };
            CalculateAssetDependencyData.RunInternal(input, out CalculateAssetDependencyData.TaskOutput output);

            // this define should get added to the shader build usage tags
            mat.shaderKeywords = new string[] { "TEST_DEFINE" };

            CalculateAssetDependencyData.TaskInput input2 = CreateDefaultInput();
            input2.Assets = new List <GUID>()
            {
                matGUID
            };
            CalculateAssetDependencyData.RunInternal(input2, out CalculateAssetDependencyData.TaskOutput output2);

            var ids = output2.AssetResults[0].usageTags.GetObjectIdentifiers();

            Assert.IsTrue(ids.Count((x) => x.guid == shaderGUID) == 1, "Shader is not in build usage tags");
            Assert.AreNotEqual(output.AssetResults[0].usageTags.GetHashCode(), output2.AssetResults[0].usageTags.GetHashCode(), "Build usage tags were not affected by material keywords");
        }
コード例 #4
0
        public void WhenAssetHasNoDependencies()
        {
            // Create an asset
            string assetPath = Path.Combine(kTestAssetFolder, "myPrefab.prefab");
            GUID   guid      = CreateGameObject(assetPath);

            CalculateAssetDependencyData.TaskInput input = CreateDefaultInput();
            input.Assets = new List <GUID>()
            {
                guid
            };

            CalculateAssetDependencyData.RunInternal(input, out CalculateAssetDependencyData.TaskOutput output);

            Assert.AreEqual(1, output.AssetResults.Length);
            Assert.AreEqual(guid, output.AssetResults[0].asset);
            Assert.AreEqual(2, output.AssetResults[0].assetInfo.includedObjects.Count); // GameObject and Transform
            Assert.AreEqual(0, output.AssetResults[0].assetInfo.referencedObjects.Count);
            Assert.IsNull(output.AssetResults[0].spriteData);
            Assert.IsNull(output.AssetResults[0].extendedData);
        }
コード例 #5
0
        public void WhenAssetHasANullRepresentation_LogsWarning()
        {
            // Create an asset
            string assetPath = Path.Combine(kTestAssetFolder, "myPrefab.prefab");
            GUID   guid      = CreateGameObject(assetPath);

            CalculateAssetDependencyData.TaskInput input = CreateDefaultInput();
            input.Assets = new List <GUID>()
            {
                guid
            };
            input.EngineHooks = new NullLoadRepresentationFake();

            LogAssert.Expect(LogType.Warning, new Regex(".+It will not be included in the build"));

            CalculateAssetDependencyData.RunInternal(input, out CalculateAssetDependencyData.TaskOutput output);

            Assert.AreEqual(guid, output.AssetResults[0].asset);
            Assert.AreEqual(2, output.AssetResults[0].assetInfo.includedObjects.Count); // GameObject and Transform
            Assert.AreEqual(0, output.AssetResults[0].assetInfo.referencedObjects.Count);
        }
コード例 #6
0
        public void WhenAssetHasMultipleRepresentations_ExtendedDataContainsAllButMainAsset()
        {
            const int kExtraRepresentations = 2;
            string    assetPath             = Path.Combine(kTestAssetFolder, "myPrefab.asset");
            Material  mat = new Material(Shader.Find("Transparent/Diffuse"));

            AssetDatabase.CreateAsset(mat, assetPath);

            for (int i = 0; i < kExtraRepresentations; i++)
            {
                AssetDatabase.AddObjectToAsset(new Material(Shader.Find("Transparent/Diffuse")), assetPath);
            }

            AssetDatabase.SaveAssets();

            GUID guid = new GUID(AssetDatabase.AssetPathToGUID(assetPath));

            CalculateAssetDependencyData.TaskInput input = CreateDefaultInput();
            input.Assets = new List <GUID>()
            {
                guid
            };

            CalculateAssetDependencyData.RunInternal(input, out CalculateAssetDependencyData.TaskOutput output);

            ObjectIdentifier[]         allObjIDs    = ContentBuildInterface.GetPlayerObjectIdentifiersInAsset(guid, EditorUserBuildSettings.activeBuildTarget);
            HashSet <ObjectIdentifier> expectedReps = new HashSet <ObjectIdentifier>();

            for (int i = 1; i < allObjIDs.Length; i++)
            {
                expectedReps.Add(allObjIDs[i]);
            }

            Assert.AreEqual(kExtraRepresentations, output.AssetResults[0].extendedData.Representations.Count);
            Assert.AreEqual(kExtraRepresentations, expectedReps.Count);
            foreach (var id in output.AssetResults[0].extendedData.Representations)
            {
                Assert.IsTrue(expectedReps.Contains(id));
            }
        }
コード例 #7
0
        public void WhenSomeAssetDataIsCached_CachedVersionIsUsed()
        {
            const int kCachedCount = 5;

            // Create 10 assets, import half of them,
            CalculateAssetDependencyData.TaskInput input = CreateDefaultInput();
            string      assetPath   = Path.Combine(kTestAssetFolder, "myPrefab.prefab");
            List <GUID> allGUIDs    = new List <GUID>();
            List <GUID> cachedGUIDs = new List <GUID>();

            for (int i = 0; i < kCachedCount; i++)
            {
                GUID cachedGUID = CreateGameObject(Path.Combine(kTestAssetFolder, $"myPrefab{i * 2}.prefab"), $"go{i * 2}");
                cachedGUIDs.Add(cachedGUID);
                allGUIDs.Add(cachedGUID);
                allGUIDs.Add(CreateGameObject(Path.Combine(kTestAssetFolder, $"myPrefab{i * 2 + 1}.prefab"), $"go{i * 2 + 1}"));
            }

            using (BuildCache cache = new BuildCache())
            {
                input.BuildCache = cache;
                input.Assets     = cachedGUIDs;
                CalculateAssetDependencyData.RunInternal(input, out CalculateAssetDependencyData.TaskOutput output);
                cache.SyncPendingSaves();
                input.Assets = allGUIDs;
                CalculateAssetDependencyData.RunInternal(input, out CalculateAssetDependencyData.TaskOutput output2);

                Assert.AreEqual(output.AssetResults[0].assetInfo.includedObjects.Count, output2.AssetResults[0].assetInfo.includedObjects.Count); // GameObject and Transform
                Assert.AreEqual(0, output.CachedAssetCount);
                Assert.AreEqual(kCachedCount, output2.CachedAssetCount);

                for (int i = 0; i < kCachedCount; i++)
                {
                    bool seqEqual = Enumerable.SequenceEqual(output.AssetResults[i].assetInfo.includedObjects, output2.AssetResults[i * 2].assetInfo.includedObjects);
                    Assert.IsTrue(seqEqual);
                }
            }
        }
コード例 #8
0
 CalculateAssetDependencyData.TaskInput CreateDefaultInput()
 {
     CalculateAssetDependencyData.TaskInput input = new CalculateAssetDependencyData.TaskInput();
     input.Target = EditorUserBuildSettings.activeBuildTarget;
     return(input);
 }