public virtual void AddToLibraries(OverlayLibraryBase overlayLibrary, SlotLibraryBase slotLibrary, RaceLibraryBase raceLibrary) { if (overlayLibrary != null && overlayData.Length > 0) { #if UNITY_EDITOR UnityEditor.Undo.RecordObject(overlayLibrary, "Added Asset Collection"); #endif for (int i = 0; i < overlayData.Length; i++) { overlayLibrary.AddOverlayAsset(overlayData[i]); } } if (slotLibrary != null && slotData.Length > 0) { #if UNITY_EDITOR UnityEditor.Undo.RecordObject(slotLibrary, "Added Asset Collection"); #endif for (int i = 0; i < slotData.Length; i++) { slotLibrary.AddSlotAsset(slotData[i]); } } if (raceLibrary != null && raceData.Length > 0) { #if UNITY_EDITOR UnityEditor.Undo.RecordObject(raceLibrary, "Added Asset Collection"); #endif for (int i = 0; i < raceData.Length; i++) { raceLibrary.AddRace(raceData[i]); } } }
private void UMAAddOverlay(UMAEquipSlotData equipSlotData, SlotData slot, OverlayLibraryBase overlayLibrary, string overlayName) { slot.AddOverlay(overlayLibrary.InstantiateOverlay(overlayName)); if (equipSlotData.umaOverrideColor) { slot.SetOverlayColor(equipSlotData.umaOverlayColor, overlayName); } }
#pragma warning disable 618 public void Start() { if (!slotLibrary) { slotLibrary = GameObject.Find("SlotLibrary").GetComponent<SlotLibraryBase>(); } if (!raceLibrary) { raceLibrary = GameObject.Find("RaceLibrary").GetComponent<RaceLibraryBase>(); } if (!overlayLibrary) { overlayLibrary = GameObject.Find("OverlayLibrary").GetComponent<OverlayLibraryBase>(); } if (Instance == null) Instance = this; }
public virtual void AddToLibraries(OverlayLibraryBase overlayLibrary, SlotLibraryBase slotLibrary, RaceLibraryBase raceLibrary, UMACrowd crowd) { if (overlayLibrary != null && overlayData.Length > 0) { #if UNITY_EDITOR UnityEditor.Undo.RecordObject(overlayLibrary, "Added Asset Collection"); #endif for (int i = 0; i < overlayData.Length; i++) { overlayLibrary.AddOverlay(overlayData[i]); } } if (slotLibrary != null && slotData.Length > 0) { #if UNITY_EDITOR UnityEditor.Undo.RecordObject(slotLibrary, "Added Asset Collection"); #endif for (int i = 0; i < slotData.Length; i++) { slotLibrary.AddSlot(slotData[i]); } } if (raceLibrary != null && raceData.Length > 0) { #if UNITY_EDITOR UnityEditor.Undo.RecordObject(raceLibrary, "Added Asset Collection"); #endif for (int i = 0; i < raceData.Length; i++) { raceLibrary.AddRace(raceData[i]); } } if (crowd != null && randomSets.Length > 0) { #if UNITY_EDITOR UnityEditor.Undo.RecordObject(crowd, "Added Asset Collection"); #endif var newPool = new UMACrowdRandomSet[crowd.randomPool.Length + randomSets.Length]; Array.Copy(crowd.randomPool, newPool, crowd.randomPool.Length); for (int i = 0; i < randomSets.Length; i++) { newPool[crowd.randomPool.Length + i] = randomSets[i]; } } }
#pragma warning disable 618 public void Start() { if (!slotLibrary) { slotLibrary = GameObject.Find("SlotLibrary").GetComponent <SlotLibraryBase>(); } if (!raceLibrary) { raceLibrary = GameObject.Find("RaceLibrary").GetComponent <RaceLibraryBase>(); } if (!overlayLibrary) { overlayLibrary = GameObject.Find("OverlayLibrary").GetComponent <OverlayLibraryBase>(); } if (Instance == null) { Instance = this; } }
#pragma warning disable 618 public void Start() { if (!slotLibrary) { slotLibrary = GameObject.Find("SlotLibrary").GetComponent <SlotLibraryBase>(); } if (!raceLibrary) { raceLibrary = GameObject.Find("RaceLibrary").GetComponent <RaceLibraryBase>(); } if (!overlayLibrary) { overlayLibrary = GameObject.Find("OverlayLibrary").GetComponent <OverlayLibraryBase>(); } // Note: Removed null check so that this is always assigned if you have a UMAContext in your scene // This will avoid those occasions where someone drops in a bogus context in a test scene, and then // later loads a valid scene (and everything breaks) Instance = this; }
void GenerateUMA() { umaDynamicAvatar = avatarGOFactory.Create(); GameObject player = umaDynamicAvatar.gameObject; player.name = "MyUMA"; this.slotLibrary = umaDynamicAvatar.context.slotLibrary; this.overlayLibrary = umaDynamicAvatar.context.overlayLibrary; this.raceLibrary = umaDynamicAvatar.context.raceLibrary; umaData = player.AddComponent <UMAData> (); umaDynamicAvatar.umaData = umaData; umaData.umaRecipe = CreateMaleRecipe(); // Generate UMA umaDynamicAvatar.UpdateNewRace(); Animator animator = player.GetComponent <Animator>(); // controller.m_Animator = animator; }
public static void Apply(UMA.UMAData umaData, CrowdRaceData race, Color skinColor, Color HairColor, HashSet <string> Keywords, SlotLibraryBase slotLibrary, OverlayLibraryBase overlayLibrary) { var slotParts = new HashSet <string>(); umaData.umaRecipe.slotDataList = new SlotData[race.slotElements.Length]; for (int i = 0; i < race.slotElements.Length; i++) { var currentElement = race.slotElements[i]; if (!string.IsNullOrEmpty(currentElement.requirement) && !slotParts.Contains(currentElement.requirement)) { continue; } if (!string.IsNullOrEmpty(currentElement.condition)) { if (currentElement.condition.StartsWith("!")) { if (Keywords.Contains(currentElement.condition.Substring(1))) { continue; } } else { if (!Keywords.Contains(currentElement.condition)) { continue; } } } if (currentElement.possibleSlots.Length == 0) { continue; } int randomResult = Random.Range(0, currentElement.possibleSlots.Length); var slot = currentElement.possibleSlots[randomResult]; if (string.IsNullOrEmpty(slot.slotID)) { continue; } slotParts.Add(slot.slotID); SlotData slotData; if (slot.useSharedOverlayList && slot.overlayListSource >= 0 && slot.overlayListSource < i) { slotData = slotLibrary.InstantiateSlot(slot.slotID, umaData.umaRecipe.slotDataList[slot.overlayListSource].GetOverlayList()); } else { if (slot.useSharedOverlayList) { Debug.LogError("UMA Crowd: Invalid overlayListSource for " + slot.slotID); } slotData = slotLibrary.InstantiateSlot(slot.slotID); } umaData.umaRecipe.slotDataList[i] = slotData; for (int overlayIdx = 0; overlayIdx < slot.overlayElements.Length; overlayIdx++) { var currentOverlayElement = slot.overlayElements[overlayIdx]; randomResult = Random.Range(0, currentOverlayElement.possibleOverlays.Length); var overlay = currentOverlayElement.possibleOverlays[randomResult]; if (string.IsNullOrEmpty(overlay.overlayID)) { continue; } overlay.UpdateVersion(); slotParts.Add(overlay.overlayID); Color overlayColor; switch (overlay.overlayType) { case UMACrowdRandomSet.OverlayType.Color: overlayColor = overlay.minRGB; break; case UMACrowdRandomSet.OverlayType.Texture: overlayColor = Color.white; break; case UMACrowdRandomSet.OverlayType.Hair: overlayColor = HairColor * overlay.hairColorMultiplier; break; case UMACrowdRandomSet.OverlayType.Skin: overlayColor = skinColor + new Color(Random.Range(overlay.minRGB.r, overlay.maxRGB.r), Random.Range(overlay.minRGB.g, overlay.maxRGB.g), Random.Range(overlay.minRGB.b, overlay.maxRGB.b), 1); break; case UMACrowdRandomSet.OverlayType.Random: overlayColor = new Color(Random.Range(overlay.minRGB.r, overlay.maxRGB.r), Random.Range(overlay.minRGB.g, overlay.maxRGB.g), Random.Range(overlay.minRGB.b, overlay.maxRGB.b), Random.Range(overlay.minRGB.a, overlay.maxRGB.a)); break; default: Debug.LogError("Unknown RandomSet overlayType: " + ((int)overlay.overlayType)); overlayColor = overlay.minRGB; break; } var overlayData = overlayLibrary.InstantiateOverlay(overlay.overlayID, overlayColor); slotData.AddOverlay(overlayData); if (overlay.colorChannelUse != ChannelUse.None) { overlayColor.a *= overlay.minRGB.a; if (overlay.colorChannelUse == ChannelUse.InverseColor) { Vector3 color = new Vector3(overlayColor.r, overlayColor.g, overlayColor.b); var len = color.magnitude; if (len < 1f) { len = 1f; } color = new Vector3(1.001f, 1.001f, 1.001f) - color; color = color.normalized * len; overlayColor = new Color(color.x, color.y, color.z, overlayColor.a); } overlayData.SetColor(overlay.colorChannel, overlayColor); } } } }
public static void Apply(UMA.UMAData umaData, CrowdRaceData race, Color skinColor, Color HairColor, HashSet <string> Keywords, SlotLibraryBase slotLibrary, OverlayLibraryBase overlayLibrary) { var slotParts = new HashSet <string>(); umaData.umaRecipe.slotDataList = new SlotData[race.slotElements.Length]; for (int i = 0; i < race.slotElements.Length; i++) { var currentElement = race.slotElements[i]; if (!string.IsNullOrEmpty(currentElement.requirement) && !slotParts.Contains(currentElement.requirement)) { continue; } if (!string.IsNullOrEmpty(currentElement.condition)) { if (currentElement.condition.StartsWith("!")) { if (Keywords.Contains(currentElement.condition.Substring(1))) { continue; } } else { if (!Keywords.Contains(currentElement.condition)) { continue; } } } if (currentElement.possibleSlots.Length == 0) { continue; } int randomResult = Random.Range(0, currentElement.possibleSlots.Length); var slot = currentElement.possibleSlots[randomResult]; if (string.IsNullOrEmpty(slot.slotID)) { continue; } slotParts.Add(slot.slotID); SlotData slotData; if (slot.useSharedOverlayList && slot.overlayListSource >= 0 && slot.overlayListSource < i) { slotData = slotLibrary.InstantiateSlot(slot.slotID, umaData.umaRecipe.slotDataList[slot.overlayListSource].GetOverlayList()); } else { if (slot.useSharedOverlayList) { Debug.LogError("UMA Crowd: Invalid overlayListSource for " + slot.slotID); } slotData = slotLibrary.InstantiateSlot(slot.slotID); } umaData.umaRecipe.slotDataList[i] = slotData; for (int overlayIdx = 0; overlayIdx < slot.overlayElements.Length; overlayIdx++) { var currentOverlayElement = slot.overlayElements[overlayIdx]; randomResult = Random.Range(0, currentOverlayElement.possibleOverlays.Length); var overlay = currentOverlayElement.possibleOverlays[randomResult]; if (string.IsNullOrEmpty(overlay.overlayID)) { continue; } slotParts.Add(overlay.overlayID); Color overlayColor; if (overlay.useSkinColor) { overlayColor = skinColor + new Color(Random.Range(overlay.minRGB.r, overlay.maxRGB.r), Random.Range(overlay.minRGB.g, overlay.maxRGB.g), Random.Range(overlay.minRGB.b, overlay.maxRGB.b), 1); } else if (overlay.useHairColor) { overlayColor = HairColor * overlay.hairColorMultiplier; } else { overlayColor = new Color(Random.Range(overlay.minRGB.r, overlay.maxRGB.r), Random.Range(overlay.minRGB.g, overlay.maxRGB.g), Random.Range(overlay.minRGB.b, overlay.maxRGB.b), 1); } slotData.AddOverlay(overlayLibrary.InstantiateOverlay(overlay.overlayID, overlayColor)); } if (umaData.umaRecipe.slotDataList[i].GetOverlayList().Count == 0) { Debug.LogError("Slot without overlay: " + umaData.umaRecipe.slotDataList[i].slotName + " at index " + i + " of race: " + race.raceID); } } }
public static void Apply(UMA.UMAData umaData, CrowdRaceData race, Color skinColor, Color HairColor, HashSet<string> Keywords, SlotLibraryBase slotLibrary, OverlayLibraryBase overlayLibrary) { var slotParts = new HashSet<string>(); umaData.umaRecipe.slotDataList = new SlotData[race.slotElements.Length]; for (int i = 0; i < race.slotElements.Length; i++) { var currentElement = race.slotElements[i]; if (!string.IsNullOrEmpty(currentElement.requirement) && !slotParts.Contains(currentElement.requirement)) continue; if (!string.IsNullOrEmpty(currentElement.condition)) { if (currentElement.condition.StartsWith("!")) { if (Keywords.Contains(currentElement.condition.Substring(1))) continue; } else { if (!Keywords.Contains(currentElement.condition)) continue; } } if (currentElement.possibleSlots.Length == 0) continue; int randomResult = Random.Range(0, currentElement.possibleSlots.Length); var slot = currentElement.possibleSlots[randomResult]; if (string.IsNullOrEmpty(slot.slotID)) continue; slotParts.Add(slot.slotID); SlotData slotData; if (slot.useSharedOverlayList && slot.overlayListSource >= 0 && slot.overlayListSource < i) { slotData = slotLibrary.InstantiateSlot(slot.slotID, umaData.umaRecipe.slotDataList[slot.overlayListSource].GetOverlayList()); } else { if (slot.useSharedOverlayList) { Debug.LogError("UMA Crowd: Invalid overlayListSource for " + slot.slotID); } slotData = slotLibrary.InstantiateSlot(slot.slotID); } umaData.umaRecipe.slotDataList[i] = slotData; for (int overlayIdx = 0; overlayIdx < slot.overlayElements.Length; overlayIdx++) { var currentOverlayElement = slot.overlayElements[overlayIdx]; randomResult = Random.Range(0, currentOverlayElement.possibleOverlays.Length); var overlay = currentOverlayElement.possibleOverlays[randomResult]; if (string.IsNullOrEmpty(overlay.overlayID)) continue; overlay.UpdateVersion(); slotParts.Add(overlay.overlayID); Color overlayColor; switch (overlay.overlayType) { case UMACrowdRandomSet.OverlayType.Color: overlayColor = overlay.minRGB; break; case UMACrowdRandomSet.OverlayType.Texture: overlayColor = Color.white; break; case UMACrowdRandomSet.OverlayType.Hair: overlayColor = HairColor * overlay.hairColorMultiplier; break; case UMACrowdRandomSet.OverlayType.Skin: overlayColor = skinColor + new Color(Random.Range(overlay.minRGB.r, overlay.maxRGB.r), Random.Range(overlay.minRGB.g, overlay.maxRGB.g), Random.Range(overlay.minRGB.b, overlay.maxRGB.b), 1); break; case UMACrowdRandomSet.OverlayType.Random: overlayColor = new Color(Random.Range(overlay.minRGB.r, overlay.maxRGB.r), Random.Range(overlay.minRGB.g, overlay.maxRGB.g), Random.Range(overlay.minRGB.b, overlay.maxRGB.b), Random.Range(overlay.minRGB.a, overlay.maxRGB.a)); break; default: Debug.LogError("Unknown RandomSet overlayType: "+((int)overlay.overlayType)); overlayColor = overlay.minRGB; break; } var overlayData = overlayLibrary.InstantiateOverlay(overlay.overlayID, overlayColor); slotData.AddOverlay(overlayData); if (overlay.colorChannelUse != ChannelUse.None) { overlayColor.a *= overlay.minRGB.a; if (overlay.colorChannelUse == ChannelUse.InverseColor) { Vector3 color = new Vector3(overlayColor.r, overlayColor.g, overlayColor.b); var len = color.magnitude; if (len < 1f) len = 1f; color = new Vector3(1.001f, 1.001f, 1.001f) - color; color = color.normalized* len; overlayColor = new Color(color.x, color.y, color.z, overlayColor.a); } overlayData.SetColor(overlay.colorChannel, overlayColor); } } if (umaData.umaRecipe.slotDataList[i].GetOverlayList().Count == 0) { Debug.LogError("Slot without overlay: " + umaData.umaRecipe.slotDataList[i].slotName + " at index " + i + " of race: " + race.raceID); } } }
public static void Apply(UMA.UMAData umaData, CrowdRaceData race, Color skinColor, Color HairColor, HashSet<string> Keywords, SlotLibraryBase slotLibrary, OverlayLibraryBase overlayLibrary) { var slotParts = new HashSet<string>(); umaData.umaRecipe.slotDataList = new SlotData[race.slotElements.Length]; for (int i = 0; i < race.slotElements.Length; i++) { var currentElement = race.slotElements[i]; if (!string.IsNullOrEmpty(currentElement.requirement) && !slotParts.Contains(currentElement.requirement)) continue; if (!string.IsNullOrEmpty(currentElement.condition)) { if (currentElement.condition.StartsWith("!")) { if (Keywords.Contains(currentElement.condition.Substring(1))) continue; } else { if (!Keywords.Contains(currentElement.condition)) continue; } } if (currentElement.possibleSlots.Length == 0) continue; int randomResult = Random.Range(0, currentElement.possibleSlots.Length); var slot = currentElement.possibleSlots[randomResult]; if (string.IsNullOrEmpty(slot.slotID)) continue; slotParts.Add(slot.slotID); SlotData slotData; if (slot.useSharedOverlayList && slot.overlayListSource >= 0 && slot.overlayListSource < i) { slotData = slotLibrary.InstantiateSlot(slot.slotID, umaData.umaRecipe.slotDataList[slot.overlayListSource].GetOverlayList()); } else { if (slot.useSharedOverlayList) { Debug.LogError("UMA Crowd: Invalid overlayListSource for " + slot.slotID); } slotData = slotLibrary.InstantiateSlot(slot.slotID); } umaData.umaRecipe.slotDataList[i] = slotData; for (int overlayIdx = 0; overlayIdx < slot.overlayElements.Length; overlayIdx++) { var currentOverlayElement = slot.overlayElements[overlayIdx]; randomResult = Random.Range(0, currentOverlayElement.possibleOverlays.Length); var overlay = currentOverlayElement.possibleOverlays[randomResult]; if (string.IsNullOrEmpty(overlay.overlayID)) continue; slotParts.Add(overlay.overlayID); Color overlayColor; if (overlay.useSkinColor) { overlayColor = skinColor + new Color(Random.Range(overlay.minRGB.r, overlay.maxRGB.r), Random.Range(overlay.minRGB.g, overlay.maxRGB.g), Random.Range(overlay.minRGB.b, overlay.maxRGB.b), 1); } else if (overlay.useHairColor) { overlayColor = HairColor * overlay.hairColorMultiplier; } else { overlayColor = new Color(Random.Range(overlay.minRGB.r, overlay.maxRGB.r), Random.Range(overlay.minRGB.g, overlay.maxRGB.g), Random.Range(overlay.minRGB.b, overlay.maxRGB.b), 1); } slotData.AddOverlay(overlayLibrary.InstantiateOverlay(overlay.overlayID, overlayColor)); } if (umaData.umaRecipe.slotDataList[i].GetOverlayList().Count == 0) { Debug.LogError("Slot without overlay: " + umaData.umaRecipe.slotDataList[i].slotName + " at index " + i + " of race: " + race.raceID); } } }
void GenerateUMA() { umaDynamicAvatar = avatarGOFactory.Create(); GameObject player = umaDynamicAvatar.gameObject; player.name = "MyUMA"; this.slotLibrary = umaDynamicAvatar.context.slotLibrary; this.overlayLibrary = umaDynamicAvatar.context.overlayLibrary; this.raceLibrary = umaDynamicAvatar.context.raceLibrary; umaData = player.AddComponent<UMAData> (); umaDynamicAvatar.umaData = umaData; umaData.umaRecipe = CreateMaleRecipe(); // Generate UMA umaDynamicAvatar.UpdateNewRace(); Animator animator = player.GetComponent<Animator>(); // controller.m_Animator = animator; }