コード例 #1
0
        public JsonTreePrototype(TreePrototype src_, ResourceMapper resMap)
        {
            src            = src_;
            prefabId       = resMap.getRootPrefabId(src.prefab, true);
            prefabObjectId = resMap.getPrefabObjectId(src.prefab, true);

            meshIdData = new MeshIdData(src.prefab, resMap);

            /*
             * meshId = -1;
             * meshMaterials.Clear();
             *
             * var srcObj = src.prefab as GameObject;
             * if (!srcObj)
             *      return;
             * var filter = srcObj.GetComponent<MeshFilter>();
             * if (filter && filter.sharedMesh){
             *      meshId = resMap.getMeshId(filter.sharedMesh);
             * }
             * var renderer = srcObj.GetComponent<Renderer>();
             * if (renderer){
             *      foreach(var cur in renderer.sharedMaterials){
             *              meshMaterials.Add(resMap.getMaterialId(cur));
             *      }
             * }
             */
        }
コード例 #2
0
ファイル: ResourceMapper.cs プロジェクト: has-n/ProjectExodus
        JsonMesh makeJsonMesh(MeshStorageKey meshKey, ResId id)
        {
            var result = new JsonMesh(meshKey, id, this);

            if (!meshKey.skeletonRoot || !meshKey.prefab)
            {
                return(result);
            }

            if (!isSkeletalMesh(meshKey.mesh))
            {
                return(result);
            }

            /*
             *      Doing this in steps, as it is possible to have root transform issue and then somehow no bindpose issues.
             *      I mean, miracles can happen, right?
             */
            result = fixSkinMeshRootBoneTransform(meshKey, result);

            //Currently disabled
            //result = fixSkinMeshPosedBones(meshKey, result);

            return(result);
        }
コード例 #3
0
        public bool processRemainingItems(ResourceProcessCallback callback)
        {
            if (callback == null)
            {
                throw new System.ArgumentNullException("callback");
            }
            if (!hasUnprocessedItems)
            {
                return(false);
            }

            for (int i = numProcessedItems; i < numRegisteredItems; i++)
            {
                var id  = new ResId(i);
                var obj = registered[i];
                try{
                    callback(obj, id);
                }
                finally{
                    processed.Add(obj);
                }
                //resourceMap.Add(obj, id);, No this should be done earlier
            }

            return(true);
        }
コード例 #4
0
        public JsonSkinRendererData(SkinnedMeshRenderer rend, GameObjectMapper objMap, ResourceMapper resMap)
        {
            if (!rend)
            {
                throw new System.ArgumentNullException("rend");
            }
            quality = rend.quality.ToString();
            skinnedMotionVectors = rend.skinnedMotionVectors;
            updateWhenOffscreen  = rend.updateWhenOffscreen;

            boneNames.Clear();
            boneIds.Clear();
            foreach (var cur in rend.bones)
            {
                boneNames.Add(cur.name);
                boneTransforms.Add(cur.localToWorldMatrix);
                boneIds.Add(objMap.getId(cur.gameObject));
            }

            var sharedMesh = rend.sharedMesh;

            meshId = resMap.getOrRegMeshId(rend, null);            //resMap.getMeshId(sharedMesh);

            materials.Clear();
            var sharedMats = rend.sharedMaterials;

            foreach (var curMat in sharedMats)
            {
                materials.Add(resMap.getMaterialId(curMat));
            }
        }
コード例 #5
0
 void checkValidId(ResId id)
 {
     if (!isValidId(id))
     {
         throw new System.ArgumentException(string.Format("Invalid skeleton id {0}", id));
     }
 }
コード例 #6
0
        public ResId getId(Resource res, bool createNew, bool throwIfMissing = false)
        {
            if (res == null)
            {
                if (createNew && (res == null) && throwIfMissing)
                {
                    throw new System.ArgumentNullException("resType");
                }
                return(ResId.invalid);
            }

            ResId result;

            if (resourceMap.TryGetValue(res, out result))
            {
                return(result);
            }

            if (!createNew)
            {
                return(ResId.invalid);
            }

            result = new ResId(numRegisteredItems);

            registered.Add(res);
            resourceMap.Add(res, result);

            return(result);
        }
コード例 #7
0
        public Transform getSkeletonTransformById(ResId id)
        {
            checkValidId(id);
            var skelTransform = jsonSkeletonRootTransforms.getValOrDefault(id, null);

            return(skelTransform);
        }
コード例 #8
0
        public ResId registerSkeleton(Transform rootTransform, bool findPrefab)
        {
            if (findPrefab)
            {
                rootTransform = Utility.getSrcPrefabAssetObject(rootTransform, false);
            }

            JsonSkeleton skel = findSkeleton(rootTransform);

            if (skel != null)
            {
                var testId = findSkeletonId(rootTransform);
                Sanity.check(testId == skel.id, "ID mismatch within skeleton registry");
                return(skel.id);
            }

            /* if (jsonSkeletons.TryGetValue(rootTransform, out skel))
             *      return skel.id;*/

            var newSkel = JsonSkeletonBuilder.buildFromRootTransform(rootTransform);
            var newId   = ResId.fromObjectIndex(skeletons.Count);          //ResId.fromObjectIndex(jsonSkeletons.Count);

            Sanity.check(skeletons.Count == sortedSkelIds.Count, "Skeleton id and skeleton count mismatch");

            newSkel.id = newId;

            //jsonSkeletons.Add(rootTransform, newSkel);
            skelIds.Add(rootTransform, newId);
            skeletons.Add(newId, newSkel);
            sortedSkelIds.Add(newId);
            jsonSkeletonRootTransforms.Add(newSkel.id, rootTransform);

            return(newSkel.id);
        }
コード例 #9
0
        /*
         *      Uh, do we even need temporary object with all those fields?
         *      Could just grab reflection probes themselves in this case...
         */
        public JsonReflectionProbe(ReflectionProbe obj, ResourceMapper resMap)
        {
            backgroundColor = obj.backgroundColor;
            blendDistance   = obj.blendDistance;
            boxProjection   = obj.boxProjection;
            center          = obj.center;
            size            = obj.size;

            /*clearType = (obj.clearFlags == UnityEngine.Rendering.ReflectionProbeClearFlags.Skybox) ?
             *      "skybox": "color";*/
            clearType     = obj.clearFlags.ToString();
            cullingMask   = obj.cullingMask;
            hdr           = obj.hdr;
            intensity     = obj.intensity;
            nearClipPlane = obj.nearClipPlane;
            farClipPlane  = obj.farClipPlane;
            resolution    = obj.resolution;
            mode          = obj.mode.ToString();        //getModeString(obj.mode);
            refreshMode   = obj.refreshMode.ToString(); //getModeString(obj.mode);

            var customCubemap = obj.customBakedTexture as Cubemap;
            var customTex2d   = obj.customBakedTexture as Texture2D;

            customCubemapId = resMap.getCubemapId(customCubemap);
            customTex2dId   = resMap.getTextureId(customTex2d);
        }
コード例 #10
0
        public JsonAnimator(Animator animator_, ResourceMapper resMap)
        {
            animator = animator_;
            if (!animator_)
            {
                throw new System.ArgumentNullException("animator_");
            }
            name       = animator.name;
            skeletonId = resMap.skelRegistry.registerSkeleton(animator.transform, true);

            //var skel = resMap.getSkeletonById(skeletonId);
            var skelTransform = resMap.skelRegistry.getSkeletonTransformById(skeletonId);
            //var root = PrefabUtility.FindPrefabRoot(skelTransform.gameObject);

            //var meshKey = new MeshStorageKey(
            var skinRends = animator.GetComponentsInChildren <SkinnedMeshRenderer>();

            skinMeshIds = skinRends.Select((arg) => resMap.getOrRegMeshId(arg, skelTransform)).ToList();

            var runtimeAnimator = animator.runtimeAnimatorController;
            var editorAnimator  = runtimeAnimator as UnityEditor.Animations.AnimatorController;

            animatorControllerId = resMap.getAnimatorControllerId(editorAnimator, animator);

            humanBones = gatherHumanBones(animator);
        }
コード例 #11
0
 public IEnumerable <ResId> getNewIds()
 {
     foreach (var index in getNewIndexes())
     {
         yield return(ResId.fromObjectIndex(index));
     }
 }
コード例 #12
0
 public Resource getObject(ResId id)
 {
     if (!isValidObjectId(id))
     {
         throw new System.ArgumentException(string.Format("Invalid object id {0}", id));
     }
     return(objectList[id.rawId]);
 }
コード例 #13
0
        public Resource findResource(ResId id)
        {
            if (isValidId(id))
            {
                return(registered[id.rawId]);
            }

            return(null);
        }
コード例 #14
0
 public JsonAudioClip(AudioClip clip_, ResourceMapper resMap)
 {
     audioClip = clip_;
     if (!audioClip)
     {
         return;
     }
     name      = audioClip.name;
     id        = resMap.getAudioClipId(audioClip);
     assetPath = AssetDatabase.GetAssetPath(audioClip);
 }
コード例 #15
0
        public JsonTerrainDetailPrototype(DetailPrototype data_, ResourceMapper resMap)
        {
            data = data_;

            textureId            = resMap.getTextureId(data.prototypeTexture);
            detailPrefabId       = resMap.getRootPrefabId(data.prototype, true);
            detailPrefabObjectId = resMap.getPrefabObjectId(data.prototype, true);

            meshIdData = new MeshIdData(data.prototype, resMap);
            //meshId = resMap.getPrefabObjectId
        }
コード例 #16
0
            public Bone(string name_, string path_, int id_, ResId parentId_, Matrix4x4 world_, Matrix4x4 local_, Matrix4x4 rootRelative_)
            {
                name     = name_;
                path     = path_;
                id       = id_;
                parentId = parentId_;

                world        = world_;
                local        = local_;
                rootRelative = rootRelative_;
            }
コード例 #17
0
        public JsonCollider(Collider col, int colliderIndex_, ResourceMapper resMap)
        {
            colliderIndex = colliderIndex_;
            if (!col)
            {
                throw new System.ArgumentNullException("col");
            }
            if (resMap == null)
            {
                throw new System.ArgumentNullException("resMap");
            }
            var box     = col as BoxCollider;
            var sphere  = col as SphereCollider;
            var capsule = col as CapsuleCollider;
            var meshCol = col as MeshCollider;

            collider = col;
            if (box)
            {
                colliderType = colliderTypeBox;
                center       = box.center;
                size         = box.size;
            }
            if (sphere)
            {
                colliderType = colliderTypeSphere;
                center       = sphere.center;
                radius       = sphere.radius;
            }
            if (capsule)
            {
                colliderType = colliderTypeCapsule;
                center       = capsule.center;
                radius       = capsule.radius;
                height       = capsule.height;
                direction    = capsule.direction;
            }
            if (meshCol)
            {
                colliderType = colliderTypeMesh;
                meshId       = resMap.getMeshId(meshCol.sharedMesh,
                                                meshCol.convex ? MeshUsageFlags.ConvexCollider: MeshUsageFlags.TriangleCollider
                                                );

                bool isConvex = meshCol.convex;

                /*
                 * if (resMap.isValidMeshId(meshId))
                 *      resMap.flagMeshId(meshId, isConvex, !isConvex);//by default there will be no flags on a mesh...
                 */
            }
        }
コード例 #18
0
		public JsonMesh(JsonMesh other){
			if (other == null)
				throw new System.ArgumentNullException();
			id = other.id;
			name = other.name;
			uniqueName = other.uniqueName;
			usageFlags = other.usageFlags;
			convexCollider = other.convexCollider;
			triangleCollider = other.triangleCollider;

			path = other.path;
			materials = other.materials.ToList();
			readable = other.readable;

			vertexCount = other.vertexCount;
			
			colors = other.colors.copyArray();
			verts = other.verts.copyArray();
			tangents = other.tangents.copyArray();
			
			uv0 = other.uv0.copyArray();
			uv1 = other.uv1.copyArray();
			uv2 = other.uv2.copyArray();
			uv3 = other.uv3.copyArray();
			uv4 = other.uv4.copyArray();
			uv5 = other.uv5.copyArray();
			uv6 = other.uv6.copyArray();
			uv7 = other.uv7.copyArray();
			
			boneWeights = other.boneWeights.ToList();
			boneIndexes = other.boneIndexes.ToList();
			
			defaultSkeletonId = other.defaultSkeletonId;
			
			defaultBoneNames = other.defaultBoneNames.ToList();
			
			defaultMeshNodeName = other.defaultMeshNodeName;
			defaultMeshNodePath = other.defaultMeshNodePath;
			defaultMeshNodeMatrix = other.defaultMeshNodeMatrix;
			
			blendShapeCount = other.blendShapeCount;
			blendShapes = other.blendShapes.Select((arg) => new JsonBlendShape(arg)).ToList();
			
			bindPoses = other.bindPoses.ToList();
			
			subMeshes = other.subMeshes.Select((arg) => new SubMesh(arg)).ToList();
			
			subMeshCount = other.subMeshCount;
		}
コード例 #19
0
        public JsonTerrain(Terrain srcObj, ResourceMapper resMap)
        {
            if (!srcObj)
            {
                throw new System.ArgumentNullException("srcObj");
            }

            castShadows          = srcObj.castShadows;
            detailObjectDensity  = srcObj.detailObjectDensity;
            detailObjectDistance = srcObj.detailObjectDistance;
            drawHeightmap        = srcObj.drawHeightmap;
            drawTreesAndFoliage  = srcObj.drawTreesAndFoliage;

            renderHeightmap = (srcObj.editorRenderFlags & TerrainRenderFlags.Heightmap) != 0;
            renderTrees     = (srcObj.editorRenderFlags & TerrainRenderFlags.Trees) != 0;
            renderDetails   = (srcObj.editorRenderFlags & TerrainRenderFlags.Details) != 0;

            heightmapPixelError = srcObj.heightmapPixelError;

            legacyShininess    = srcObj.legacyShininess;
            legacySpecular     = srcObj.legacySpecular;
            lightmapIndex      = srcObj.lightmapIndex;
            lightmapScaleOffet = srcObj.lightmapScaleOffset;

            materialType = srcObj.materialType.ToString();

            patchBoundsMultiplier       = srcObj.patchBoundsMultiplier;
            preserveTreePrototypeLayers = srcObj.preserveTreePrototypeLayers;
            realtimeLightmapIndex       = srcObj.realtimeLightmapIndex;
            realtimeLightmapScaleOffset = srcObj.realtimeLightmapScaleOffset;

            treeBillboardDistance = srcObj.treeBillboardDistance;
            treeCrossFadeLength   = srcObj.treeCrossFadeLength;

            treeDistance          = srcObj.treeDistance;
            treeLodBiasMultiplier = srcObj.treeLODBiasMultiplier;

            treeMaximumFullLODCount = srcObj.treeMaximumFullLODCount;

            //And once again I doubt whehter the approahc of making a temporary object is justified.
            materialTemplateIndex = ResId.invalid;
            if (srcObj.materialType == Terrain.MaterialType.Custom)
            {
                materialTemplateIndex = resMap.getMaterialId(srcObj.materialTemplate);                //-1;
            }
            //material keeps picking up splat texutre :-\
            terrainDataId = resMap.getTerrainId(srcObj.terrainData);
            //public int terrainDataId = -1;
        }
コード例 #20
0
        protected ResId addNewObjectInternal(Resource obj, OnNewObjectAdded onAddCallback = null)
        {
            if (objectMap.ContainsKey(obj))
            {
                throw new System.ArgumentException("Logic error: duplicate registertation");
            }
            var result = new ResId(objectList.Count);

            objectMap.Add(obj, result);
            objectList.Add(obj);

            if (onAddCallback != null)
            {
                onAddCallback(obj);
            }
            return(result);
        }
コード例 #21
0
        public JsonSkeleton getSkeletonById(ResId id)
        {
            var skelTransform = getSkeletonTransformById(id);

            if (!skelTransform)
            {
                throw new System.ArgumentException(string.Format("skeleton with id {0} not found", id));
            }

            var result = findSkeleton(skelTransform);

            if (result == null)
            {
                throw new System.ArgumentException(string.Format("skeleton with id {0} not found", id));
            }

            return(result);
        }
コード例 #22
0
        public JsonAnimatorController(UnityEditor.Animations.AnimatorController controller_, Animator animator, ResId id_, ResourceMapper resMap)
        {
            controller = controller_;
            if (!controller)
            {
                throw new System.ArgumentNullException("controller_");
            }
            if (!animator)
            {
                throw new System.ArgumentNullException("animator");
            }
            id   = id_;
            name = controller.name;
            path = AssetDatabase.GetAssetPath(controller);

            parameters   = controller.parameters.Select((arg) => new JsonAnimatorControllerParameter(arg)).ToList();
            animationIds = controller.animationClips.Select((arg) => resMap.getAnimationClipId(arg, animator)).ToList();
            //animations = controller.animationClips.Select((arg, idx) => new JsonAnimationClip(arg, idx)).ToList();
        }
コード例 #23
0
        public JsonTexture(Texture tex, ResourceMapper resMap)
        {
            name = tex.name;
            id   = resMap.findTextureId(tex);          //exp.textures.findId(tex);
            var assetPath = AssetDatabase.GetAssetPath(tex);

            resMap.registerAssetPath(assetPath);
            path       = assetPath;
            filterMode = tex.filterMode.ToString();
            width      = tex.width;
            height     = tex.height;
            wrapMode   = tex.wrapMode.ToString();
            var tex2D      = tex as Texture2D;
            var rendTarget = tex as RenderTexture;

            isTex2D        = tex2D != null;
            isRenderTarget = rendTarget != null;
            var importer    = AssetImporter.GetAtPath(assetPath);
            var texImporter = importer as TextureImporter;            //(TextureImporter)importer;

            if (isTex2D)
            {
                alphaTransparency = tex2D.alphaIsTransparency;
                format            = tex2D.format.ToString();
            }
            if (isRenderTarget)
            {
                anisoLevel = rendTarget.anisoLevel;
            }
            if (texImporter)
            {
                importDataFound = true;
                sRGB            = texImporter.sRGBTexture;
                textureType     = texImporter.textureType.ToString();
                normalMapFlag   = (texImporter.textureType == TextureImporterType.NormalMap);
            }

            texParams       = new JsonTextureParameters(tex);
            texImportParams = new JsonTextureImportParameters(texImporter);

            textureRef = tex;
        }
コード例 #24
0
        public JsonCubemap(Cubemap cubemap_, ResourceMapper resMap)
        {
            cubemap = cubemap_;
            if (!cubemap)
            {
                return;
            }
            id        = resMap.findCubemapId(cubemap);
            assetPath = AssetDatabase.GetAssetPath(cubemap);
            name      = cubemap.name;

            var importer    = AssetImporter.GetAtPath(assetPath);
            var texImporter = importer as TextureImporter;

            texParams       = new JsonTextureParameters(cubemap);
            texImportParams = new JsonTextureImportParameters(texImporter);

            needConversion = true;

            /*
             * if (TextureUtility.isSupportedTexExtension(assetPath))
             *      needConversion = true;
             * if (texImportParams.initialized && texImportParams.importer){
             *      if (texImportParams.importer.generateCubemap != TextureImporterGenerateCubemap.FullCubemap){
             *              needConversion = true;
             *      }
             *      //huh.... I don't really have a way to get original texture dimensiosn, it looks like it. Oh well?
             * }
             */

            format = cubemap.format.ToString();
            isHdr  = TextureUtility.isHdrFormat(cubemap.format);

            exportPath = assetPath;
            rawPath    = "";
            if (needConversion)
            {
                exportPath = System.IO.Path.ChangeExtension(assetPath, ".png");
                rawPath    = System.IO.Path.ChangeExtension(assetPath, ".raw");
            }
        }
コード例 #25
0
        public JsonAnimationClip(AnimationClip clip_, Animator animator_, ResId id_, ResourceMapper resMap, AnimationSampler animSampler = null)
        {
            clip     = clip_;
            id       = id_;
            animator = animator_;
            if (!clip)
            {
                throw new System.ArgumentNullException("clip_");
            }
            if (!animator)
            {
                throw new System.ArgumentNullException("animator_");
            }
            if (resMap == null)
            {
                throw new System.ArgumentNullException("resMap");
            }

            name = clip.name;
            sampleMatrixCurves(resMap, animSampler);
        }
コード例 #26
0
        public ResId getOrRegMeshId(MeshStorageKey meshKey, GameObject obj, Mesh mesh)
        {
            if (!mesh)
            {
                return(ResId.invalid);
            }
            ResId result = meshes.getId(meshKey, true, null);

            if (meshMaterials.ContainsKey(mesh))
            {
                return(result);
            }

            var r = obj.GetComponent <Renderer>();

            if (r)
            {
                meshMaterials[mesh] = new List <Material>(r.sharedMaterials);
            }
            return(result);
        }
コード例 #27
0
        public JsonPrefabData(GameObject prefabObject, ResourceMapper resMap)
        {
            id = resMap.getRootPrefabId(prefabObject, true);

            path = AssetDatabase.GetAssetPath(prefabObject);
            guid = AssetDatabase.AssetPathToGUID(path);
            //name = System.IO.Path.GetFileName(path);
            name = prefabObject.name;            //looks like name of prefab mirrors that of a file, sans extension
            //prefabType = PrefabUtility.GetPrefabType(prefabObject).ToString();
            prefabAssetType      = PrefabUtility.GetPrefabAssetType(prefabObject).ToString();
            prefabInstanceStatus = PrefabUtility.GetPrefabInstanceStatus(prefabObject).ToString();

            var mapper = resMap.getPrefabObjectMapper(prefabObject);

            for (int i = 0; i < mapper.numObjects; i++)
            {
                ///Well, this is certainly not the best way to go about it...
                var src = mapper.getObjectByIndex(i);
                var dst = new JsonGameObject(src, mapper, resMap);
                objects.Add(dst);
            }
        }
コード例 #28
0
        public MeshIdData(GameObject srcObj, ResourceMapper resMap)
        {
            if (!srcObj)
            {
                return;
            }
            var filter = srcObj.GetComponent <MeshFilter>();

            if (filter && filter.sharedMesh)
            {
                meshId = resMap.getMeshId(filter.sharedMesh, MeshUsageFlags.None);
            }
            var renderer = srcObj.GetComponent <Renderer>();

            if (renderer)
            {
                foreach (var cur in renderer.sharedMaterials)
                {
                    meshMaterials.Add(resMap.getMaterialId(cur));
                }
            }
        }
コード例 #29
0
 public static bool isValidId(ResId id)
 {
     return(id.isValid);
 }
コード例 #30
0
 public void writeRawValue(ResId val)
 {
     //builder.Append(val.rawId);
     builder.Append(val.rawId.ToString(writerCulture));
 }