Exemple #1
0
        private static void CreateEntityForAsset(IRegistry registry, UTinyProject project, UTinyEntityGroup entityGroup, UTinyAssetInfo asset)
        {
            var @object = asset.Object;

            UTinyEntity entity = null;

            if (@object is Texture2D)
            {
                var texture  = @object as Texture2D;
                var path     = AssetDatabase.GetAssetPath(texture);
                var importer = (TextureImporter)AssetImporter.GetAtPath(path);

                entity = registry.CreateEntity(UTinyId.New(), $"{GetAssetEntityPath(typeof(Texture2D))}{asset.Name}");

                var image2d = entity.AddComponent(registry.GetImage2DType());
                image2d.Refresh();

                image2d["imageFile"] = $"ut-asset:{asset.Name}";

                var settings = UTinyUtility.GetAssetExportSettings(project, @object) as UTinyTextureSettings;
                if (settings != null && settings.FormatType == TextureFormatType.JPG && UTinyAssetExporter.TextureExporter.ReallyHasAlpha(texture))
                {
                    image2d["maskFile"] = $"ut-asset:{asset.Name}_a";
                }

                image2d["disableSmoothing"] = importer.filterMode == FilterMode.Point;

                var sprite = AssetDatabase.LoadAllAssetsAtPath(path).OfType <Sprite>().FirstOrDefault();

                // @NOTE The `importer.spritePixelsPerUnit` is currently NOT used in the editor...
                // We ALWAYS draw sprites at 1 pixel to world unit in the editor.
                // When we switch to using SpriteRenderer as our editor drawer we can just pass `sprite.pixelsPerUnit` directly here.
                var pixelsToWorldUnits = sprite ? sprite.pixelsPerUnit : 1;
                image2d["pixelsToWorldUnits"] = 1.0f / pixelsToWorldUnits;
            }
            else if (@object is Sprite)
            {
                var sprite = (Sprite)@object;

                entity = registry.CreateEntity(UTinyId.New(), $"{GetAssetEntityPath(typeof(Sprite))}{asset.Name}");

                var sprite2d = entity.AddComponent(registry.GetSprite2DType());
                sprite2d.Refresh();

                sprite2d["image"] = sprite.texture;
                var region = sprite2d["imageRegion"] as UTinyObject;
                if (null != region)
                {
                    region["x"]      = sprite.rect.x / sprite.texture.width;
                    region["y"]      = sprite.rect.y / sprite.texture.height;
                    region["width"]  = sprite.rect.width / sprite.texture.width;
                    region["height"] = sprite.rect.height / sprite.texture.height;
                }

                var pivot = sprite2d["pivot"] as UTinyObject;
                if (null != pivot)
                {
                    pivot["x"] = sprite.pivot.x / sprite.rect.width;
                    pivot["y"] = sprite.pivot.y / sprite.rect.height;
                }
            }
            else if (@object is AudioClip)
            {
                entity = registry.CreateEntity(UTinyId.New(), $"{GetAssetEntityPath(typeof(AudioClip))}{asset.Name}");

                var audioClip = entity.AddComponent(registry.GetAudioClipType());
                audioClip.Refresh();
                audioClip["file"] = $"ut-asset:{asset.Name}";
            }
            else if (@object is Font)
            {
                entity = registry.CreateEntity(UTinyId.New(), $"{GetAssetEntityPath(typeof(Font))}{asset.Name}");

                var fontAsset = entity.AddComponent(registry.GetFontType());
                fontAsset.Refresh();
                fontAsset["file"] = $"ut-asset:{asset.Name}";
            }

            if (null != entity)
            {
                entityGroup.AddEntityReference((UTinyEntity.Reference)entity);
            }

            foreach (var child in asset.Children)
            {
                CreateEntityForAsset(registry, project, entityGroup, child);
            }
        }