コード例 #1
0
        public override void Import(EditorImporter importer, GameObject gameObject, Node gltfNode, Extension extension)
        {
            var lightIndex = ((KHR_lights_punctualExtension)extension).lightIndex;
            var lights     = (KHR_lights_punctualExtension)importer.root.Extensions[ExtensionName];

            var l     = gameObject.AddComponent <Light>();
            var light = lights.lights[lightIndex];

            l.type      = light.type;
            l.color     = light.color;
            l.intensity = light.intensity;

            var type = light.type;

            if (type == LightType.Directional)
            {
            }
            else if (type == LightType.Point)
            {
                l.range = light.range;
            }
            else if (type == LightType.Spot)
            {
                l.range     = light.range;
                l.spotAngle = light.outerConeAngle * 2 * 180 / (float)Math.PI;
            }
        }
コード例 #2
0
        public override void Import(EditorImporter importer, GameObject gameObject, Node gltfNode, Extension extension)
        {
            var physicBody = (Sein_physicBodyExtension)extension;
            var rigidBody  = gameObject.AddComponent <SeinRigidBody>();

            rigidBody.mass         = physicBody.rigidBody.mass;
            rigidBody.restitution  = physicBody.rigidBody.restitution;
            rigidBody.friction     = physicBody.rigidBody.friction;
            rigidBody.unControl    = physicBody.rigidBody.unControl;
            rigidBody.physicStatic = physicBody.rigidBody.physicStatic;
            rigidBody.sleeping     = physicBody.rigidBody.sleeping;

            foreach (var c in physicBody.colliders)
            {
                if (c is SphereCollider)
                {
                    var collider = gameObject.AddComponent <SphereCollider>();
                    collider.center    = ((SphereCollider)c).center;
                    collider.radius    = ((SphereCollider)c).radius;
                    collider.isTrigger = c.isTrigger;
                }
                else if (c is BoxCollider)
                {
                    var collider = gameObject.AddComponent <BoxCollider>();
                    collider.center    = ((BoxCollider)c).center;
                    collider.size      = ((BoxCollider)c).size;
                    collider.isTrigger = c.isTrigger;
                }
            }

            UnityEngine.Object.DestroyImmediate(physicBody.go);
        }
コード例 #3
0
        private void LoadAtlas(Sein_atlasExtension.Atlas atlas, EditorImporter importer, string basePath, int i)
        {
            var json    = JObject.FromObject(atlas.json);
            var imageId = (int)json["meta"]["image"]["index"];

            json["meta"]["image"] = importer.root.Images[imageId].Uri;
            var dest = Path.Combine(basePath, (string)json["name"]);

            if (Directory.Exists(dest))
            {
                int index = 1;
                while (true)
                {
                    if (!Directory.Exists(dest + "-" + index))
                    {
                        dest += "-" + index;
                        break;
                    }

                    index += 1;
                }
            }

            Directory.CreateDirectory(dest);
            AssetDatabase.Refresh();

            var destInUnity = "Assets" + dest.Replace(Application.dataPath, "");
            var seinAtlas   = ScriptableObject.CreateInstance <SeinAtlas>();

            AssetDatabase.CreateAsset(seinAtlas, Path.Combine(destInUnity, (string)json["name"] + ".asset"));
            seinAtlas.Import(json, importer.gltfDirectoryPath);

            IMPORTED_ATLASES[i] = seinAtlas;
        }
コード例 #4
0
        public override void Import(EditorImporter importer, GameObject gameObject, Node gltfNode, Extension extension)
        {
            var test          = (Sein_testExtension)extension;
            var testComponent = gameObject.AddComponent <SeinTest>();

            testComponent.rotateSpeed = test.rotateSpeed;
        }
コード例 #5
0
 public static void Import(string extensionName, EditorImporter importer, Texture2D texture, GLTF.Schema.Texture gltfTex, Extension extension)
 {
     if (Name2Extensions.ContainsKey(extensionName))
     {
         Name2Extensions[extensionName].Import(importer, texture, gltfTex, extension);
     }
 }
 public override void Import(EditorImporter importer, UnityEngine.Material material, GLTF.Schema.Material gltfMat, Extension extension)
 {
     if (material.HasProperty("unlit"))
     {
         material.SetInt("unlit", 1);
     }
 }
コード例 #7
0
 public static void Import(string extensionName, EditorImporter importer, UnityEngine.Mesh mesh, GLTF.Schema.Mesh gltfMesh, Extension extension)
 {
     if (Name2Extensions.ContainsKey(extensionName))
     {
         Name2Extensions[extensionName].Import(importer, mesh, gltfMesh, extension);
     }
 }
コード例 #8
0
 public static void Import(string extensionName, EditorImporter importer, GameObject gameObject, Node gltfNode, Extension extension)
 {
     if (Name2Extensions.ContainsKey(extensionName))
     {
         Name2Extensions[extensionName].Import(importer, gameObject, gltfNode, extension);
     }
 }
コード例 #9
0
 public static void Import(string extensionName, EditorImporter importer, Extension extension)
 {
     if (Name2Extensions.ContainsKey(extensionName))
     {
         Name2Extensions[extensionName].Import(importer, extension);
     }
 }
コード例 #10
0
        public override void Import(EditorImporter importer, GameObject gameObject, Node gltfNode, Extension extension)
        {
            var source      = (Sein_audioListenerExtension)extension;
            var audioSource = gameObject.AddComponent <SeinAudioListener>();

            audioSource.rotatable = source.rotatable;
        }
        public override void Import(EditorImporter importer, UnityEngine.Material material, GLTF.Schema.Material gltfMat, Extension extension)
        {
            var mat       = (Sein_customMaterialExtension)extension;
            var className = "Sein/" + mat.className;
            var shader    = Shader.Find(className);

            var alphaMode = gltfMat.AlphaMode;

            if (alphaMode == AlphaMode.BLEND)
            {
                mat.transparent = true;
            }
            else if (alphaMode == AlphaMode.MASK)
            {
                mat.transparent = true;
            }

            if (shader == null)
            {
                shader = Shader.Find(className.Replace("Material", ""));
            }

            if (shader == null)
            {
                mat.material    = material;
                mat.isComponent = true;
                return;
            }

            material.shader = shader;
            if (material.HasProperty("cloneForInst"))
            {
                material.SetInt("cloneForInst", 1);
            }


            material.SetInt("_Mode", (int)alphaMode);
            material.SetFloat("_Cutoff", (float)gltfMat.AlphaCutoff);

            WriteUiforms(importer, material, mat.uniformsTexture);
            WriteUiforms(importer, material, mat.uniformsCubeTexture);
            WriteUiforms(importer, material, mat.uniformsFloat);
            WriteUiforms(importer, material, mat.uniformsFloatVec2);
            WriteUiforms(importer, material, mat.uniformsFloatVec3);
            WriteUiforms(importer, material, mat.uniformsFloatVec4);
            WriteUiforms(importer, material, mat.uniformsColor);
            WriteUiforms(importer, material, mat.uniformsFloatMat2);
            WriteUiforms(importer, material, mat.uniformsFloatMat3);
            WriteUiforms(importer, material, mat.uniformsFloatMat4);
            WriteUiforms(importer, material, mat.uniformsInt);
            WriteUiforms(importer, material, mat.uniformsIntVec2);
            WriteUiforms(importer, material, mat.uniformsIntVec3);
            WriteUiforms(importer, material, mat.uniformsIntVec4);
        }
コード例 #12
0
        public override void Import(EditorImporter importer, GameObject gameObject, Node gltfNode, Extension extension)
        {
            var mr = gameObject.GetComponent <Renderer>();
            var r  = (Sein_rendererExtension)extension;

            if (mr != null)
            {
                mr.shadowCastingMode = r.castShadows ? UnityEngine.Rendering.ShadowCastingMode.On : UnityEngine.Rendering.ShadowCastingMode.Off;
                mr.receiveShadows    = r.receiveShadows;
            }
        }
コード例 #13
0
        public override void Import(EditorImporter importer, GameObject gameObject, Node gltfNode, Extension extension)
        {
            var n        = (Sein_nodeExtension)extension;
            var seinNode = gameObject.AddComponent <SeinNode>();

            seinNode.selfType              = n.selfType;
            seinNode.className             = n.className;
            seinNode.tag                   = n.tag;
            seinNode.layer                 = n.layer;
            seinNode.persistent            = n.persistent;
            seinNode.emitComponentsDestroy = n.emitComponentsDestroy;
            seinNode.updateOnEverTick      = n.updateOnEverTick;
            seinNode.isStatic              = n.isStatic;
            seinNode.skipThisNode          = n.skipThisNode;
        }
        private IEnumerator LoadClips(EditorImporter importer, Sein_audioClipsExtension extension)
        {
            var clips    = extension.clips;
            var basePath = Path.Combine(importer.importDirectoryPath, "audios");

            Directory.CreateDirectory(basePath);
            int i = 0;

            foreach (var clip in clips)
            {
                LoadClip(clip, importer.gltfDirectoryPath, basePath, i);
                importer.SetProgress("AUDIO", (i + 1), clips.Count);
                i += 1;

                yield return(null);
            }
        }
コード例 #15
0
        private IEnumerator LoadAtlases(EditorImporter importer, Sein_atlasExtension extension)
        {
            var atlases  = extension.atlases;
            var basePath = Path.Combine(importer.importDirectoryPath, "atlases");

            Directory.CreateDirectory(basePath);
            IMPORTED_ATLASES = new SeinAtlas[atlases.Count];
            int i = 0;

            foreach (var atlas in atlases)
            {
                LoadAtlas(atlas, importer, basePath, i);
                importer.SetProgress("ATLAS", (i + 1), atlases.Count);
                i += 1;

                yield return(null);
            }
        }
        public override void Import(EditorImporter importer, GameObject gameObject, Node gltfNode, Extension extension)
        {
            var source      = (Sein_audioSourceExtension)extension;
            var audioSource = gameObject.AddComponent <SeinAudioSource>();

            audioSource.defaultClip     = source.defaultClip;
            audioSource.needAutoPlay    = source.needAutoPlay;
            audioSource.isSpaceAudio    = source.isSpaceAudio;
            audioSource.autoPlayOptions = source.autoPlayOptions;
            audioSource.spaceOptions    = source.spaceOptions;
            audioSource.clips           = new SeinAudioOneClip[source.clips.Count];
            for (int i = 0; i < source.clips.Count; i += 1)
            {
                var clip = new SeinAudioOneClip();
                clip.name            = source.clips[i].Key;
                clip.clip            = Sein_audioClipsExtensionFactory.IMPORTED_CLIPS[source.clips[i].Value];
                audioSource.clips[i] = clip;
            }
        }
コード例 #17
0
        public override void Import(EditorImporter importer, GameObject gameObject, Node gltfNode, Extension extension)
        {
            var globalEx = (Sein_spriteExtension)importer.root.Extensions[ExtensionName];
            var sp       = globalEx.sprites[((Sein_spriteExtension)extension).index];

            var ex     = (Sein_spriteExtension)extension;
            var sprite = gameObject.AddComponent <SeinSprite>();

            sprite.width  = sp.width;
            sprite.height = sp.height;
            sprite.Generate();

            sprite.isBillboard = sp.isBillboard;
            sprite.frustumTest = sp.frustumTest;
            sprite.frameName   = sp.frameName;
            sprite.atlas       = Sein_atlasExtensionFactory.IMPORTED_ATLASES[sp.atlasId];

            if (sp.materialId != null)
            {
                sprite.material = importer.assetCache.MaterialCache[sp.materialId.Id].UnityMaterial;
            }

            sprite.SetFrame(sprite.atlas, sprite.frameName);
        }
コード例 #18
0
 public virtual void Import(EditorImporter importer, UnityEngine.Material material, GLTF.Schema.Material gltfMat, Extension extension)
 {
 }
コード例 #19
0
 public override void Import(EditorImporter importer, Extension extension)
 {
     importer.taskManager.addTask(LoadAtlases(importer, (Sein_atlasExtension)extension));
 }
 public override void Import(EditorImporter importer, Extension extension)
 {
     importer.taskManager.addTask(LoadClips(importer, (Sein_audioClipsExtension)extension));
 }
コード例 #21
0
 /*
  * @todo: import entry
  */
 public virtual void Import(EditorImporter importer, Extension extension)
 {
 }
        private void WriteUiforms <TValue>(EditorImporter importer, UnityEngine.Material material, SeinMaterialUniform <TValue>[] uniforms)
        {
            foreach (SeinMaterialUniform <TValue> uniform in uniforms)
            {
                var name = uniform.name;
                switch (uniform.type)
                {
                case (ESeinMaterialUniformType.FLOAT):
                    material.SetFloat(name, (uniform as SeinMaterialUniformFloat).value);
                    break;

                case (ESeinMaterialUniformType.INT):
                    material.SetInt(name, (uniform as SeinMaterialUniformInt).value);
                    break;

                case (ESeinMaterialUniformType.SAMPLER_2D):
                    var tex = importer.GetTexture((uniform as SeinMaterialUniformTexture).id.Id);
                    material.SetTexture(name, tex);
                    break;

                // todo: support cubemap
                case (ESeinMaterialUniformType.SAMPLER_CUBE):
                    break;

                case (ESeinMaterialUniformType.FLOAT_VEC2):
                    var fv2 = (uniform as SeinMaterialUniformFloatVec2).value;
                    material.SetFloatArray(name, new List <float> {
                        fv2.x, fv2.y
                    });
                    break;

                case (ESeinMaterialUniformType.FLOAT_VEC3):
                    var fv3 = (uniform as SeinMaterialUniformFloatVec3).value;
                    material.SetFloatArray(name, new List <float> {
                        fv3.x, fv3.y, fv3.z
                    });
                    break;

                case (ESeinMaterialUniformType.FLOAT_VEC4):
                    if (uniform.GetType() == typeof(SeinMaterialUniformColor))
                    {
                        material.SetColor(name, (uniform as SeinMaterialUniformColor).value);
                    }
                    material.SetVector(name, (uniform as SeinMaterialUniformFloatVec4).value);
                    break;

                case (ESeinMaterialUniformType.FLOAT_MAT2):
                    material.SetMatrix(name, (uniform as SeinMaterialUniformFloatMat2).value);
                    break;

                case (ESeinMaterialUniformType.FLOAT_MAT3):
                    material.SetMatrix(name, (uniform as SeinMaterialUniformFloatMat3).value);
                    break;

                case (ESeinMaterialUniformType.FLOAT_MAT4):
                    material.SetMatrix(name, (uniform as SeinMaterialUniformFloatMat4).value);
                    break;

                default:
                    break;
                }
            }
        }
コード例 #23
0
 public virtual void Import(EditorImporter importer, GameObject gameObject, Node gltfNode, Extension extension)
 {
 }
コード例 #24
0
        public override void Import(EditorImporter importer, GameObject gameObject, Node gltfNode, Extension extension)
        {
            var seinAnimator = (Sein_animatorExtension)extension;
            var id           = "";

            for (var i = 0; i < seinAnimator.modelAnimations.Length; i += 1)
            {
                var prefix = (seinAnimator.prefixes != null && seinAnimator.prefixes.Length > i) ? seinAnimator.prefixes[i] : seinAnimator.prefix;
                var name   = seinAnimator.modelAnimations[i];

                if (prefix != null && prefix.Length > 0)
                {
                    id += prefix + "@" + name;
                }
                else
                {
                    id += name;
                }
            }

            AnimatorController controller;

            if (IMPORTED_CONTROLLERS.ContainsKey(id))
            {
                controller = IMPORTED_CONTROLLERS[id];
            }
            else
            {
                var controllerName = seinAnimator.name != null && seinAnimator.name != "" ? seinAnimator.name : gameObject.name;
                var controllerPath = Path.Combine(new string[] { importer.importDirectoryPath, "animations", controllerName + ".controller" });
                if (File.Exists(controllerPath))
                {
                    int index = 1;
                    while (true)
                    {
                        controllerPath = Path.Combine(new string[] { importer.importDirectoryPath, "animations", controllerName + "-" + index + ".controller" });

                        if (!File.Exists(controllerPath))
                        {
                            break;
                        }
                    }
                }

                controller = AnimatorController.CreateAnimatorControllerAtPath(GLTFUtils.getPathProjectFromAbsolute(controllerPath));

                for (var i = 0; i < seinAnimator.modelAnimations.Length; i += 1)
                {
                    var prefix = (seinAnimator.prefixes != null && seinAnimator.prefixes.Length > i) ? seinAnimator.prefixes[i] : seinAnimator.prefix;
                    var name   = seinAnimator.modelAnimations[i];

                    if (prefix != null && prefix.Length > 0)
                    {
                        name = prefix + "@" + name;
                    }

                    if (!IMPORTED_CLIPS.ContainsKey(name))
                    {
                        continue;
                    }

                    controller.AddMotion((Motion)IMPORTED_CLIPS[name]);
                }
            }

            var animator = gameObject.AddComponent <Animator>();

            animator.runtimeAnimatorController = controller;
        }
コード例 #25
0
 public GlTFImporter(EditorImporter.ProgressCallback progressCallback, EditorImporter.RefreshWindow finishCallback)
 {
     _importer      = new EditorImporter(progressCallback, finishCallback);
     _unzippedFiles = new List <string>();
 }
コード例 #26
0
 public override void Import(EditorImporter importer, Extension extension)
 {
 }
コード例 #27
0
 public virtual void Import(EditorImporter importer, UnityEngine.Mesh mesh, GLTF.Schema.Mesh gltfMesh, Extension extension)
 {
 }
コード例 #28
0
 public virtual void Import(EditorImporter importer, Texture2D texture, GLTF.Schema.Texture gltfTex, Extension extension)
 {
 }
コード例 #29
0
        public override void Import(EditorImporter importer, GameObject gameObject, Node gltfNode, Extension extension)
        {
            var seinAnimator = (Sein_animatorExtension)extension;
            var id           = "";

            for (var i = 0; i < seinAnimator.modelAnimations.Length; i += 1)
            {
                var prefix = (seinAnimator.prefixes != null && seinAnimator.prefixes.Length > i) ? seinAnimator.prefixes[i] : seinAnimator.prefix;
                var name   = seinAnimator.modelAnimations[i];

                if (prefix != null && prefix.Length > 0)
                {
                    id += prefix + "@" + name;
                }
                else
                {
                    id += name;
                }
            }

            AnimatorController controller;

            if (IMPORTED_CONTROLLERS.ContainsKey(id))
            {
                controller = IMPORTED_CONTROLLERS[id];
            }
            else
            {
                var controllerName = seinAnimator.name != null && seinAnimator.name != "" ? seinAnimator.name : gameObject.name;
                var controllerPath = Path.Combine(new string[] { importer.importDirectoryPath, "animations", controllerName + ".controller" });
                if (File.Exists(controllerPath))
                {
                    int index = 1;
                    while (true)
                    {
                        controllerPath = Path.Combine(new string[] { importer.importDirectoryPath, "animations", controllerName + "-" + index + ".controller" });

                        if (!File.Exists(controllerPath))
                        {
                            break;
                        }
                    }
                }

                controller = AnimatorController.CreateAnimatorControllerAtPath(GLTFUtils.getPathProjectFromAbsolute(controllerPath));

                for (var i = 0; i < seinAnimator.modelAnimations.Length; i += 1)
                {
                    var prefix = (seinAnimator.prefixes != null && seinAnimator.prefixes.Length > i) ? seinAnimator.prefixes[i] : seinAnimator.prefix;
                    var name   = seinAnimator.modelAnimations[i];

                    if (prefix != null && prefix.Length > 0)
                    {
                        name = prefix + "@" + name;
                    }

                    if (!IMPORTED_CLIPS.ContainsKey(name))
                    {
                        continue;
                    }

                    var clip = IMPORTED_CLIPS[name];
                    controller.AddMotion((Motion)clip);

                    var nodePath = AnimationUtility.CalculateTransformPath(gameObject.transform, importer.sceneObject.transform);
                    var temp     = new List <Temp>();
                    foreach (var binding in AnimationUtility.GetCurveBindings(clip))
                    {
                        var path         = binding.path;
                        var realPath     = path.Substring(nodePath.Length);
                        var propertyName = binding.propertyName;
                        var type         = binding.type;
                        var curve        = AnimationUtility.GetEditorCurve(clip, binding);

                        temp.Add(new Temp {
                            path = realPath, propertyName = propertyName, type = type, curve = curve
                        });
                    }

                    clip.ClearCurves();

                    foreach (var binding in temp)
                    {
                        clip.SetCurve(binding.path, binding.type, binding.propertyName, binding.curve);
                    }
                }
            }

            var animator = gameObject.AddComponent <Animator>();

            animator.runtimeAnimatorController = controller;
        }