// 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; } } }
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; } } }
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; } } }