Esempio n. 1
0
 // UMAs can have lots of renderers, but this should return the one that we should use when calculating umaData.characterHeight/Radius/Mass- will that always be umaData.GetRenderer(0)?
 private SkinnedMeshRenderer GetBaseRenderer(UMAData umaData, int rendererToGet = 0)
 {
     if (umaData.rendererCount == 0 || umaData.GetRenderer(rendererToGet) == null)
     {
         return(null);
     }
     return(umaData.GetRenderer(rendererToGet));
 }
        protected override IEnumerator workerMethod()
        {
            umaData.generatedMaterials.rendererCount = rendererCount;
            umaData.generatedMaterials.materials     = generatedMaterials;

            GenerateAtlasData();
            OptimizeAtlas();

            textureProcessCoroutine.Prepare(umaData, umaGenerator);
            yield return(textureProcessCoroutine);

            CleanBackUpTextures();
            UpdateUV();

            // HACK - is this the right place?
            SlotData[] slots = umaData.umaRecipe.slotDataList;
            for (int i = 0; i < slots.Length; i++)
            {
                var slot = slots[i];
                if (slot == null)
                {
                    continue;
                }

                for (int j = 1; j < slot.OverlayCount; j++)
                {
                    OverlayData overlay = slot.GetOverlay(j);
                    #if UNITY_STANDALONE || UNITY_IOS || UNITY_ANDROID || UNITY_PS4 || UNITY_XBOXONE //supported platforms for procedural materials
                    if ((overlay != null) && (overlay.isProcedural))
                    {
                        overlay.ReleaseProceduralTextures();
                    }
                    #endif
                }
            }

            if (updateMaterialList)
            {
                for (int j = 0; j < umaData.rendererCount; j++)
                {
                    var renderer      = umaData.GetRenderer(j);
                    var mats          = renderer.sharedMaterials;
                    var newMats       = new Material[mats.Length];
                    var atlasses      = umaData.generatedMaterials.materials;
                    int materialIndex = 0;
                    for (int i = 0; i < atlasses.Count; i++)
                    {
                        if (atlasses[i].renderer == j)
                        {
                            UMAUtils.DestroySceneObject(mats[materialIndex]);
                            newMats[materialIndex] = atlasses[i].material;
                            materialIndex++;
                        }
                    }
                    renderer.sharedMaterials = newMats;
                }
            }
        }
Esempio n. 3
0
        public void OnDnaApplied(UMAData umaData)
        {
            var rigid = umaData.gameObject.GetComponent <Rigidbody>();

            if (rigid == null)
            {
                rigid = umaData.gameObject.AddComponent <Rigidbody>();
            }
            rigid.constraints = RigidbodyConstraints.FreezeRotation;
            rigid.mass        = umaData.characterMass;

            CapsuleCollider capsule = umaData.gameObject.GetComponent <CapsuleCollider>();
            BoxCollider     box     = umaData.gameObject.GetComponent <BoxCollider>();

            if (umaData.umaRecipe.raceData.umaTarget == RaceData.UMATarget.Humanoid)
            {
                if (capsule == null)
                {
                    capsule = umaData.gameObject.AddComponent <CapsuleCollider>();
                }
                if (box != null)
                {
                    Destroy(box);
                }

                capsule.radius = umaData.characterRadius;
                capsule.height = umaData.characterHeight;
                capsule.center = new Vector3(0, capsule.height / 2, 0);
            }
            else
            {
                if (box == null)
                {
                    box = umaData.gameObject.AddComponent <BoxCollider>();
                }
                if (capsule != null)
                {
                    Destroy(capsule);
                }

                //with skycar this capsule collider makes no sense so we need the bounds to figure out what the size of the box collider should be
                //we will assume that renderer 0 is the base renderer
                var umaRenderer = umaData.GetRenderer(0);
                if (umaRenderer != null)
                {
                    box.size   = umaRenderer.bounds.size;
                    box.center = umaRenderer.bounds.center;
                }
            }
        }
Esempio n. 4
0
        public void ProcessTexture(UMAGeneratorBase _umaGenerator, UMAData _umaData, bool updateMaterialList, int InitialScaleFactor)
        {
            umaGenerator            = _umaGenerator;
            umaData                 = _umaData;
            this.updateMaterialList = updateMaterialList;
            scaleFactor             = InitialScaleFactor;
            textureProcesser        = new TextureProcessPRO();

            Start();

            umaData.generatedMaterials.rendererAssets = uniqueRenderers;
            umaData.generatedMaterials.materials      = generatedMaterials;

            GenerateAtlasData();
            OptimizeAtlas();

            textureProcesser.ProcessTexture(_umaData, _umaGenerator);

            CleanBackUpTextures();
            UpdateUV();

            // Procedural textures were done here
            if (updateMaterialList)
            {
                for (int j = 0; j < umaData.rendererCount; j++)
                {
                    var renderer      = umaData.GetRenderer(j);
                    var mats          = renderer.sharedMaterials;
                    var newMats       = new Material[mats.Length];
                    var atlasses      = umaData.generatedMaterials.materials;
                    int materialIndex = 0;
                    for (int i = 0; i < atlasses.Count; i++)
                    {
                        if (atlasses[i].rendererAsset == umaData.GetRendererAsset(j))
                        {
                            UMAUtils.DestroySceneObject(mats[materialIndex]);
                            newMats[materialIndex]          = atlasses[i].material;
                            atlasses[i].skinnedMeshRenderer = renderer;
                            atlasses[i].materialIndex       = materialIndex;
                            materialIndex++;
                        }
                    }
                    renderer.sharedMaterials = newMats;
                }
            }
        }
        protected override IEnumerator workerMethod()
        {
            umaData.generatedMaterials.rendererAssets = uniqueRenderers;
            umaData.generatedMaterials.materials      = generatedMaterials;

            GenerateAtlasData();
            OptimizeAtlas();

            textureProcessCoroutine.Prepare(umaData, umaGenerator);
            yield return(textureProcessCoroutine);

            CleanBackUpTextures();
            UpdateUV();

            // Procedural textures were done here
            if (updateMaterialList)
            {
                for (int j = 0; j < umaData.rendererCount; j++)
                {
                    var renderer      = umaData.GetRenderer(j);
                    var mats          = renderer.sharedMaterials;
                    var newMats       = new Material[mats.Length];
                    var atlasses      = umaData.generatedMaterials.materials;
                    int materialIndex = 0;
                    for (int i = 0; i < atlasses.Count; i++)
                    {
                        if (atlasses[i].rendererAsset == umaData.GetRendererAsset(j))
                        {
                            UMAUtils.DestroySceneObject(mats[materialIndex]);
                            newMats[materialIndex]          = atlasses[i].material;
                            atlasses[i].skinnedMeshRenderer = renderer;
                            atlasses[i].materialIndex       = materialIndex;
                            materialIndex++;
                        }
                    }
                    renderer.sharedMaterials = newMats;
                }
            }
        }