pvb-practice/Assetpacks/Poly Heroes/Assets/PolygonFantasyHeroCharacters/Scripts/CharacterRandomizer.cs

671 lines
30 KiB
C#

// character randomizer version 1.30
using System.Collections.Generic;
using UnityEngine;
namespace PsychoticLab
{
public enum Gender { Male, Female }
public enum Race { Human, Elf }
public enum SkinColor { White, Brown, Black, Elf }
public enum Elements { Yes, No }
public enum HeadCovering { HeadCoverings_Base_Hair, HeadCoverings_No_FacialHair, HeadCoverings_No_Hair }
public enum FacialHair { Yes, No }
public class CharacterRandomizer : MonoBehaviour
{
[Header("Demo Settings")]
public bool repeatOnPlay = false;
public float shuffleSpeed = 0.7f;
[Header("Material")]
public Material mat;
[Header("Gear Colors")]
public Color[] primary = { new Color(0.2862745f, 0.4f, 0.4941177f), new Color(0.4392157f, 0.1960784f, 0.172549f), new Color(0.3529412f, 0.3803922f, 0.2705882f), new Color(0.682353f, 0.4392157f, 0.2196079f), new Color(0.4313726f, 0.2313726f, 0.2705882f), new Color(0.5921569f, 0.4941177f, 0.2588235f), new Color(0.482353f, 0.4156863f, 0.3529412f), new Color(0.2352941f, 0.2352941f, 0.2352941f), new Color(0.2313726f, 0.4313726f, 0.4156863f) };
public Color[] secondary = { new Color(0.7019608f, 0.6235294f, 0.4666667f), new Color(0.7372549f, 0.7372549f, 0.7372549f), new Color(0.1647059f, 0.1647059f, 0.1647059f), new Color(0.2392157f, 0.2509804f, 0.1882353f) };
[Header("Metal Colors")]
public Color[] metalPrimary = { new Color(0.6705883f, 0.6705883f, 0.6705883f), new Color(0.5568628f, 0.5960785f, 0.6392157f), new Color(0.5568628f, 0.6235294f, 0.6f), new Color(0.6313726f, 0.6196079f, 0.5568628f), new Color(0.6980392f, 0.6509804f, 0.6196079f) };
public Color[] metalSecondary = { new Color(0.3921569f, 0.4039216f, 0.4117647f), new Color(0.4784314f, 0.5176471f, 0.5450981f), new Color(0.3764706f, 0.3607843f, 0.3372549f), new Color(0.3254902f, 0.3764706f, 0.3372549f), new Color(0.4f, 0.4039216f, 0.3568628f) };
[Header("Leather Colors")]
public Color[] leatherPrimary;
public Color[] leatherSecondary;
[Header("Skin Colors")]
public Color[] whiteSkin = { new Color(1f, 0.8000001f, 0.682353f) };
public Color[] brownSkin = { new Color(0.8196079f, 0.6352941f, 0.4588236f) };
public Color[] blackSkin = { new Color(0.5647059f, 0.4078432f, 0.3137255f) };
public Color[] elfSkin = { new Color(0.9607844f, 0.7843138f, 0.7294118f) };
[Header("Hair Colors")]
public Color[] whiteHair = { new Color(0.3098039f, 0.254902f, 0.1764706f), new Color(0.2196079f, 0.2196079f, 0.2196079f), new Color(0.8313726f, 0.6235294f, 0.3607843f), new Color(0.8901961f, 0.7803922f, 0.5490196f), new Color(0.8000001f, 0.8196079f, 0.8078432f), new Color(0.6862745f, 0.4f, 0.2352941f), new Color(0.5450981f, 0.427451f, 0.2156863f), new Color(0.8470589f, 0.4666667f, 0.2470588f) };
public Color whiteStubble = new Color(0.8039216f, 0.7019608f, 0.6313726f);
public Color[] brownHair = { new Color(0.3098039f, 0.254902f, 0.1764706f), new Color(0.1764706f, 0.1686275f, 0.1686275f), new Color(0.3843138f, 0.2352941f, 0.0509804f), new Color(0.6196079f, 0.6196079f, 0.6196079f), new Color(0.6196079f, 0.6196079f, 0.6196079f) };
public Color brownStubble = new Color(0.6588235f, 0.572549f, 0.4627451f);
public Color[] blackHair = { new Color(0.2431373f, 0.2039216f, 0.145098f), new Color(0.1764706f, 0.1686275f, 0.1686275f), new Color(0.1764706f, 0.1686275f, 0.1686275f) };
public Color blackStubble = new Color(0.3882353f, 0.2901961f, 0.2470588f);
public Color[] elfHair = { new Color(0.9764706f, 0.9686275f, 0.9568628f), new Color(0.1764706f, 0.1686275f, 0.1686275f), new Color(0.8980393f, 0.7764707f, 0.6196079f) };
public Color elfStubble = new Color(0.8627452f, 0.7294118f, 0.6862745f);
[Header("Scar Colors")]
public Color whiteScar = new Color(0.9294118f, 0.6862745f, 0.5921569f);
public Color brownScar = new Color(0.6980392f, 0.5450981f, 0.4f);
public Color blackScar = new Color(0.4235294f, 0.3176471f, 0.282353f);
public Color elfScar = new Color(0.8745099f, 0.6588235f, 0.6313726f);
[Header("Body Art Colors")]
public Color[] bodyArt = { new Color(0.0509804f, 0.6745098f, 0.9843138f), new Color(0.7215686f, 0.2666667f, 0.2666667f), new Color(0.3058824f, 0.7215686f, 0.6862745f), new Color(0.9254903f, 0.882353f, 0.8509805f), new Color(0.3098039f, 0.7058824f, 0.3137255f), new Color(0.5294118f, 0.3098039f, 0.6470588f), new Color(0.8666667f, 0.7764707f, 0.254902f), new Color(0.2392157f, 0.4588236f, 0.8156863f) };
// list of enabed objects on character
[HideInInspector]
public List<GameObject> enabledObjects = new List<GameObject>();
// character object lists
// male list
[HideInInspector]
public CharacterObjectGroups male;
// female list
[HideInInspector]
public CharacterObjectGroups female;
// universal list
[HideInInspector]
public CharacterObjectListsAllGender allGender;
// reference to camera transform, used for rotation around the model during or after a randomization (this is sourced from Camera.main, so the main camera must be in the scene for this to work)
Transform camHolder;
// cam rotation x
float x = 16;
// cam rotation y
float y = -30;
// randomize character creating button
void OnGUI()
{
/*
if (GUI.Button(new Rect(10, 10, 150, 50), "Randomize Character"))
{
// call randomization method
Randomize();
}
*/
GUIStyle style = new GUIStyle();
style.normal.textColor = Color.white;
style.fontStyle = FontStyle.Bold;
style.fontSize = 24;
GUI.Label(new Rect(10, 10, 150, 50), "Hold Right Mouse Button Down\nor use W A S D To Rotate.", style);
}
private void Start()
{
// rebuild all lists
BuildLists();
// disable any enabled objects before clear
if (enabledObjects.Count != 0)
{
foreach (GameObject g in enabledObjects)
{
g.SetActive(false);
}
}
// clear enabled objects list
enabledObjects.Clear();
// set default male character
ActivateItem(male.headAllElements[0]);
ActivateItem(male.eyebrow[0]);
ActivateItem(male.facialHair[0]);
ActivateItem(male.torso[0]);
ActivateItem(male.arm_Upper_Right[0]);
ActivateItem(male.arm_Upper_Left[0]);
ActivateItem(male.arm_Lower_Right[0]);
ActivateItem(male.arm_Lower_Left[0]);
ActivateItem(male.hand_Right[0]);
ActivateItem(male.hand_Left[0]);
ActivateItem(male.hips[0]);
ActivateItem(male.leg_Right[0]);
ActivateItem(male.leg_Left[0]);
// setting up the camera position, rotation, and reference for use
Transform cam = Camera.main.transform;
if(cam)
{
cam.position = transform.position + new Vector3(0, 0.3f, 2);
cam.rotation = Quaternion.Euler(0, -180, 0);
camHolder = new GameObject().transform;
camHolder.position = transform.position + new Vector3(0, 1, 0);
cam.LookAt(camHolder);
cam.SetParent(camHolder);
}
// if repeat on play is checked in the inspector, repeat the randomize method based on the shuffle speed, also defined in the inspector
if (repeatOnPlay)
InvokeRepeating("Randomize", shuffleSpeed, shuffleSpeed);
}
private void Update()
{
if (camHolder)
{
if (Input.GetKey(KeyCode.Mouse1))
{
x += 1 * Input.GetAxis("Mouse X");
y -= 1 * Input.GetAxis("Mouse Y");
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
else
{
x -= 1 * Input.GetAxis("Horizontal");
y -= 1 * Input.GetAxis("Vertical");
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
}
}
}
void LateUpdate()
{
// method for handling the camera rotation around the character
if (camHolder)
{
y = Mathf.Clamp(y, -45, 15);
camHolder.eulerAngles = new Vector3(y, x, 0.0f);
}
}
// character randomization method
void Randomize()
{
// initialize settings
Gender gender = Gender.Male;
Race race = Race.Human;
SkinColor skinColor = SkinColor.White;
Elements elements = Elements.Yes;
HeadCovering headCovering = HeadCovering.HeadCoverings_Base_Hair;
FacialHair facialHair = FacialHair.Yes;
// disable any enabled objects before clear
if (enabledObjects.Count != 0)
{
foreach (GameObject g in enabledObjects)
{
g.SetActive(false);
}
}
// clear enabled objects list (all objects now disabled)
enabledObjects.Clear();
// roll for gender
if (!GetPercent(50))
gender = Gender.Female;
// roll for human (70% chance, 30% chance for elf)
if (!GetPercent(70))
race = Race.Elf;
// roll for facial elements (beard, eyebrows)
if (!GetPercent(50))
elements = Elements.No;
// select head covering 33% chance for each
int headCoveringRoll = Random.Range(0, 100);
// HeadCoverings_Base_Hair
if (headCoveringRoll <= 33)
headCovering = HeadCovering.HeadCoverings_Base_Hair;
// HeadCoverings_No_FacialHair
if (headCoveringRoll > 33 && headCoveringRoll < 66)
headCovering = HeadCovering.HeadCoverings_No_FacialHair;
// HeadCoverings_No_Hair
if (headCoveringRoll >= 66)
headCovering = HeadCovering.HeadCoverings_No_Hair;
// select skin color if human, otherwise set skin color to elf
switch (race)
{
case Race.Human:
// select human skin 33% chance for each
int colorRoll = Random.Range(0, 100);
// select white skin
if (colorRoll <= 33)
skinColor = SkinColor.White;
// select brown skin
if (colorRoll > 33 && colorRoll < 66)
skinColor = SkinColor.Brown;
// select black skin
if (colorRoll >= 66)
skinColor = SkinColor.Black;
break;
case Race.Elf:
// select elf skin
skinColor = SkinColor.Elf;
break;
}
//roll for gender
switch (gender)
{
case Gender.Male:
// roll for facial hair if male
if (!GetPercent(50))
facialHair = FacialHair.No;
// initialize randomization
RandomizeByVariable(male, gender, elements, race, facialHair, skinColor, headCovering);
break;
case Gender.Female:
// no facial hair if female
facialHair = FacialHair.No;
// initialize randomization
RandomizeByVariable(female, gender, elements, race, facialHair, skinColor, headCovering);
break;
}
}
// randomization method based on previously selected variables
void RandomizeByVariable(CharacterObjectGroups cog, Gender gender, Elements elements, Race race, FacialHair facialHair, SkinColor skinColor, HeadCovering headCovering)
{
// if facial elements are enabled
switch (elements)
{
case Elements.Yes:
//select head with all elements
if (cog.headAllElements.Count != 0)
ActivateItem(cog.headAllElements[Random.Range(0, cog.headAllElements.Count)]);
//select eyebrows
if (cog.eyebrow.Count != 0)
ActivateItem(cog.eyebrow[Random.Range(0, cog.eyebrow.Count)]);
//select facial hair (conditional)
if (cog.facialHair.Count != 0 && facialHair == FacialHair.Yes && gender == Gender.Male && headCovering != HeadCovering.HeadCoverings_No_FacialHair)
ActivateItem(cog.facialHair[Random.Range(0, cog.facialHair.Count)]);
// select hair attachment
switch (headCovering)
{
case HeadCovering.HeadCoverings_Base_Hair:
// set hair attachment to index 1
if (allGender.all_Hair.Count != 0)
ActivateItem(allGender.all_Hair[1]);
if (allGender.headCoverings_Base_Hair.Count != 0)
ActivateItem(allGender.headCoverings_Base_Hair[Random.Range(0, allGender.headCoverings_Base_Hair.Count)]);
break;
case HeadCovering.HeadCoverings_No_FacialHair:
// no facial hair attachment
if (allGender.all_Hair.Count != 0)
ActivateItem(allGender.all_Hair[Random.Range(0, allGender.all_Hair.Count)]);
if (allGender.headCoverings_No_FacialHair.Count != 0)
ActivateItem(allGender.headCoverings_No_FacialHair[Random.Range(0, allGender.headCoverings_No_FacialHair.Count)]);
break;
case HeadCovering.HeadCoverings_No_Hair:
// select hair attachment
if (allGender.headCoverings_No_Hair.Count != 0)
ActivateItem(allGender.all_Hair[Random.Range(0, allGender.all_Hair.Count)]);
// if not human
if (race != Race.Human)
{
// select elf ear attachment
if (allGender.elf_Ear.Count != 0)
ActivateItem(allGender.elf_Ear[Random.Range(0, allGender.elf_Ear.Count)]);
}
break;
}
break;
case Elements.No:
//select head with no elements
if (cog.headNoElements.Count != 0)
ActivateItem(cog.headNoElements[Random.Range(0, cog.headNoElements.Count)]);
break;
}
// select torso starting at index 1
if (cog.torso.Count != 0)
ActivateItem(cog.torso[Random.Range(1, cog.torso.Count)]);
// determine chance for upper arms to be different and activate
if (cog.arm_Upper_Right.Count != 0)
RandomizeLeftRight(cog.arm_Upper_Right, cog.arm_Upper_Left, 15);
// determine chance for lower arms to be different and activate
if (cog.arm_Lower_Right.Count != 0)
RandomizeLeftRight(cog.arm_Lower_Right, cog.arm_Lower_Left, 15);
// determine chance for hands to be different and activate
if (cog.hand_Right.Count != 0)
RandomizeLeftRight(cog.hand_Right, cog.hand_Left, 15);
// select hips starting at index 1
if (cog.hips.Count != 0)
ActivateItem(cog.hips[Random.Range(1, cog.hips.Count)]);
// determine chance for legs to be different and activate
if (cog.leg_Right.Count != 0)
RandomizeLeftRight(cog.leg_Right, cog.leg_Left, 15);
// select chest attachment
if (allGender.chest_Attachment.Count != 0)
ActivateItem(allGender.chest_Attachment[Random.Range(0, allGender.chest_Attachment.Count)]);
// select back attachment
if (allGender.back_Attachment.Count != 0)
ActivateItem(allGender.back_Attachment[Random.Range(0, allGender.back_Attachment.Count)]);
// determine chance for shoulder attachments to be different and activate
if (allGender.shoulder_Attachment_Right.Count != 0)
RandomizeLeftRight(allGender.shoulder_Attachment_Right, allGender.shoulder_Attachment_Left, 10);
// determine chance for elbow attachments to be different and activate
if (allGender.elbow_Attachment_Right.Count != 0)
RandomizeLeftRight(allGender.elbow_Attachment_Right, allGender.elbow_Attachment_Left, 10);
// select hip attachment
if (allGender.hips_Attachment.Count != 0)
ActivateItem(allGender.hips_Attachment[Random.Range(0, allGender.hips_Attachment.Count)]);
// determine chance for knee attachments to be different and activate
if (allGender.knee_Attachement_Right.Count != 0)
RandomizeLeftRight(allGender.knee_Attachement_Right, allGender.knee_Attachement_Left, 10);
// start randomization of the random characters colors
RandomizeColors(skinColor);
}
// handle randomization of the random characters colors
void RandomizeColors(SkinColor skinColor)
{
// set skin and hair colors based on skin color roll
switch (skinColor)
{
case SkinColor.White:
// randomize and set white skin, hair, stubble, and scar color
RandomizeAndSetHairSkinColors("White", whiteSkin, whiteHair, whiteStubble, whiteScar);
break;
case SkinColor.Brown:
// randomize and set brown skin, hair, stubble, and scar color
RandomizeAndSetHairSkinColors("Brown", brownSkin, brownHair, brownStubble, brownScar);
break;
case SkinColor.Black:
// randomize and black elf skin, hair, stubble, and scar color
RandomizeAndSetHairSkinColors("Black", blackSkin, blackHair, blackStubble, blackScar);
break;
case SkinColor.Elf:
// randomize and set elf skin, hair, stubble, and scar color
RandomizeAndSetHairSkinColors("Elf", elfSkin, elfHair, elfStubble, elfScar);
break;
}
// randomize and set primary color
if (primary.Length != 0)
mat.SetColor("_Color_Primary", primary[Random.Range(0, primary.Length)]);
else
Debug.Log("No Primary Colors Specified In The Inspector");
// randomize and set secondary color
if (secondary.Length != 0)
mat.SetColor("_Color_Secondary", secondary[Random.Range(0, secondary.Length)]);
else
Debug.Log("No Secondary Colors Specified In The Inspector");
// randomize and set primary metal color
if (metalPrimary.Length != 0)
mat.SetColor("_Color_Metal_Primary", metalPrimary[Random.Range(0, metalPrimary.Length)]);
else
Debug.Log("No Primary Metal Colors Specified In The Inspector");
// randomize and set secondary metal color
if (metalSecondary.Length != 0)
mat.SetColor("_Color_Metal_Secondary", metalSecondary[Random.Range(0, metalSecondary.Length)]);
else
Debug.Log("No Secondary Metal Colors Specified In The Inspector");
// randomize and set primary leather color
if (leatherPrimary.Length != 0)
mat.SetColor("_Color_Leather_Primary", leatherPrimary[Random.Range(0, leatherPrimary.Length)]);
else
Debug.Log("No Primary Leather Colors Specified In The Inspector");
// randomize and set secondary leather color
if (leatherSecondary.Length != 0)
mat.SetColor("_Color_Leather_Secondary", leatherSecondary[Random.Range(0, leatherSecondary.Length)]);
else
Debug.Log("No Secondary Leather Colors Specified In The Inspector");
// randomize and set body art color
if (bodyArt.Length != 0)
mat.SetColor("_Color_BodyArt", bodyArt[Random.Range(0, bodyArt.Length)]);
else
Debug.Log("No Body Art Colors Specified In The Inspector");
// randomize and set body art amount
mat.SetFloat("_BodyArt_Amount", Random.Range(0.0f, 1.0f));
}
void RandomizeAndSetHairSkinColors(string info, Color[] skin, Color[] hair, Color stubble, Color scar)
{
// randomize and set elf skin color
if (skin.Length != 0)
{
mat.SetColor("_Color_Skin", skin[Random.Range(0, skin.Length)]);
}
else
{
Debug.Log("No " + info + " Skin Colors Specified In The Inspector");
}
// randomize and set elf hair color
if (hair.Length != 0)
{
mat.SetColor("_Color_Hair", hair[Random.Range(0, hair.Length)]);
}
else
{
Debug.Log("No " + info + " Hair Colors Specified In The Inspector");
}
// set stubble color
mat.SetColor("_Color_Stubble", stubble);
// set scar color
mat.SetColor("_Color_Scar", scar);
}
// method for handling the chance of left/right items to be differnt (such as shoulders, hands, legs, arms)
void RandomizeLeftRight(List<GameObject> objectListRight, List<GameObject> objectListLeft, int rndPercent)
{
// rndPercent = chance for left item to be different
// stored right index
int index = Random.Range(0, objectListRight.Count);
// enable item from list using index
ActivateItem(objectListRight[index]);
// roll for left item mismatch, if true randomize index based on left item list
if (GetPercent(rndPercent))
index = Random.Range(0, objectListLeft.Count);
// enable left item from list using index
ActivateItem(objectListLeft[index]);
}
// enable game object and add it to the enabled objects list
void ActivateItem(GameObject go)
{
// enable item
go.SetActive(true);
// add item to the enabled items list
enabledObjects.Add(go);
}
Color ConvertColor(int r, int g, int b)
{
return new Color(r / 255.0f, g / 255.0f, b / 255.0f, 1);
}
// method for rolling percentages (returns true/false)
bool GetPercent(int pct)
{
bool p = false;
int roll = Random.Range(0, 100);
if (roll <= pct)
{
p = true;
}
return p;
}
// build all item lists for use in randomization
private void BuildLists()
{
//build out male lists
BuildList(male.headAllElements, "Male_Head_All_Elements");
BuildList(male.headNoElements, "Male_Head_No_Elements");
BuildList(male.eyebrow, "Male_01_Eyebrows");
BuildList(male.facialHair, "Male_02_FacialHair");
BuildList(male.torso, "Male_03_Torso");
BuildList(male.arm_Upper_Right, "Male_04_Arm_Upper_Right");
BuildList(male.arm_Upper_Left, "Male_05_Arm_Upper_Left");
BuildList(male.arm_Lower_Right, "Male_06_Arm_Lower_Right");
BuildList(male.arm_Lower_Left, "Male_07_Arm_Lower_Left");
BuildList(male.hand_Right, "Male_08_Hand_Right");
BuildList(male.hand_Left, "Male_09_Hand_Left");
BuildList(male.hips, "Male_10_Hips");
BuildList(male.leg_Right, "Male_11_Leg_Right");
BuildList(male.leg_Left, "Male_12_Leg_Left");
//build out female lists
BuildList(female.headAllElements, "Female_Head_All_Elements");
BuildList(female.headNoElements, "Female_Head_No_Elements");
BuildList(female.eyebrow, "Female_01_Eyebrows");
BuildList(female.facialHair, "Female_02_FacialHair");
BuildList(female.torso, "Female_03_Torso");
BuildList(female.arm_Upper_Right, "Female_04_Arm_Upper_Right");
BuildList(female.arm_Upper_Left, "Female_05_Arm_Upper_Left");
BuildList(female.arm_Lower_Right, "Female_06_Arm_Lower_Right");
BuildList(female.arm_Lower_Left, "Female_07_Arm_Lower_Left");
BuildList(female.hand_Right, "Female_08_Hand_Right");
BuildList(female.hand_Left, "Female_09_Hand_Left");
BuildList(female.hips, "Female_10_Hips");
BuildList(female.leg_Right, "Female_11_Leg_Right");
BuildList(female.leg_Left, "Female_12_Leg_Left");
// build out all gender lists
BuildList(allGender.all_Hair, "All_01_Hair");
BuildList(allGender.all_Head_Attachment, "All_02_Head_Attachment");
BuildList(allGender.headCoverings_Base_Hair, "HeadCoverings_Base_Hair");
BuildList(allGender.headCoverings_No_FacialHair, "HeadCoverings_No_FacialHair");
BuildList(allGender.headCoverings_No_Hair, "HeadCoverings_No_Hair");
BuildList(allGender.chest_Attachment, "All_03_Chest_Attachment");
BuildList(allGender.back_Attachment, "All_04_Back_Attachment");
BuildList(allGender.shoulder_Attachment_Right, "All_05_Shoulder_Attachment_Right");
BuildList(allGender.shoulder_Attachment_Left, "All_06_Shoulder_Attachment_Left");
BuildList(allGender.elbow_Attachment_Right, "All_07_Elbow_Attachment_Right");
BuildList(allGender.elbow_Attachment_Left, "All_08_Elbow_Attachment_Left");
BuildList(allGender.hips_Attachment, "All_09_Hips_Attachment");
BuildList(allGender.knee_Attachement_Right, "All_10_Knee_Attachement_Right");
BuildList(allGender.knee_Attachement_Left, "All_11_Knee_Attachement_Left");
BuildList(allGender.elf_Ear, "Elf_Ear");
}
// called from the BuildLists method
void BuildList(List<GameObject> targetList, string characterPart)
{
Transform[] rootTransform = gameObject.GetComponentsInChildren<Transform>();
// declare target root transform
Transform targetRoot = null;
// find character parts parent object in the scene
foreach (Transform t in rootTransform)
{
if (t.gameObject.name == characterPart)
{
targetRoot = t;
break;
}
}
// clears targeted list of all objects
targetList.Clear();
// cycle through all child objects of the parent object
for (int i = 0; i < targetRoot.childCount; i++)
{
// get child gameobject index i
GameObject go = targetRoot.GetChild(i).gameObject;
// disable child object
go.SetActive(false);
// add object to the targeted object list
targetList.Add(go);
// collect the material for the random character, only if null in the inspector;
if (!mat)
{
if (go.GetComponent<SkinnedMeshRenderer>())
mat = go.GetComponent<SkinnedMeshRenderer>().material;
}
}
}
}
// classe for keeping the lists organized, allows for simple switching from male/female objects
[System.Serializable]
public class CharacterObjectGroups
{
public List<GameObject> headAllElements;
public List<GameObject> headNoElements;
public List<GameObject> eyebrow;
public List<GameObject> facialHair;
public List<GameObject> torso;
public List<GameObject> arm_Upper_Right;
public List<GameObject> arm_Upper_Left;
public List<GameObject> arm_Lower_Right;
public List<GameObject> arm_Lower_Left;
public List<GameObject> hand_Right;
public List<GameObject> hand_Left;
public List<GameObject> hips;
public List<GameObject> leg_Right;
public List<GameObject> leg_Left;
}
// classe for keeping the lists organized, allows for organization of the all gender items
[System.Serializable]
public class CharacterObjectListsAllGender
{
public List<GameObject> headCoverings_Base_Hair;
public List<GameObject> headCoverings_No_FacialHair;
public List<GameObject> headCoverings_No_Hair;
public List<GameObject> all_Hair;
public List<GameObject> all_Head_Attachment;
public List<GameObject> chest_Attachment;
public List<GameObject> back_Attachment;
public List<GameObject> shoulder_Attachment_Right;
public List<GameObject> shoulder_Attachment_Left;
public List<GameObject> elbow_Attachment_Right;
public List<GameObject> elbow_Attachment_Left;
public List<GameObject> hips_Attachment;
public List<GameObject> knee_Attachement_Right;
public List<GameObject> knee_Attachement_Left;
public List<GameObject> all_12_Extra;
public List<GameObject> elf_Ear;
}
}