- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- [ExecuteInEditMode]
- public class CharacterSetup : MonoBehaviour {
- [Header("Direction Game Objects")]
- public GameObject downDirection;
- public GameObject upDirection;
- public GameObject leftDirection;
- public GameObject rightDirection;
- [Header("Weapons")]
- public Sprite swingWeapon;
- public Sprite thrustWeapon;
- public Sprite bowWeapon;
- [Header("Base")]
- public Color skinColor;
- public Sprite eyeShape;
- public Color eyeColor;
- [Header("Hair")]
- public Sprite hair;
- public Sprite facialHair;
- public Sprite eyebrowShape;
- public Color hairColor;
- [Header("Headwear")]
- public Sprite headwear;
- public Color headwearColor;
- [Header("Shoulders")]
- public Sprite leftShoulder;
- public Color leftShoulderColor;
- [Space(5)]
- public Sprite rightShoulder;
- public Color rightShoulderColor;
- [Header("Left Arm")]
- public Sprite leftUpperArmEquipment;
- public Color leftUpperArmEquipmentColor;
- [Space(5)]
- public Sprite leftLowerArmEquipment;
- public Color leftLowerArmEquipmentColor;
- [Space(5)]
- public Sprite leftHandEquipment;
- public Color leftHandEquipmentColor;
- [Header("Right Arm")]
- public Sprite rightUpperArmEquipment;
- public Color rightUpperArmEquipmentColor;
- [Space(5)]
- public Sprite rightLowerArmEquipment;
- public Color rightLowerArmEquipmentColor;
- [Space(5)]
- public Sprite rightHandEquipment;
- public Color rightHandEquipmentColor;
- [Header("Upper Body")]
- public Sprite chestEquipment;
- public Color chestEquipmentColor;
- [Space(5)]
- public Sprite bodyEquipment;
- public Color bodyEquipmentColor;
- [Space(5)]
- public Sprite belt;
- public Color beltColor;
- [Space(5)]
- public Sprite hipEquipment;
- public Color hipEquipmentColor;
- [Header("Left Leg")]
- public Sprite leftUpperLegEquipment;
- public Color leftUpperLegEquipmentColor;
- [Space(5)]
- public Sprite leftLowerLegEquipment;
- public Color leftLowerLegEquipmentColor;
- [Space(5)]
- public Sprite leftFootEquipment;
- public Color leftFootEquipmentColor;
- [Header("Right Leg")]
- public Sprite rightUpperLegEquipment;
- public Color rightUpperLegEquipmentColor;
- [Space(5)]
- public Sprite rightLowerLegEquipment;
- public Color rightLowerLegEquipmentColor;
- [Space(5)]
- public Sprite rightFootEquipment;
- public Color rightFootEquipmentColor;
- private GameObject previousDownDirection;
- private SpriteRenderer[] cachedUpSpriteRenderers = null;
- private SpriteRenderer[] cachedLeftSpriteRenderers = null;
- private SpriteRenderer[] cachedDownSpriteRenderers = null;
- private SpriteRenderer[] cachedRightSpriteRenderers = null;
- void Awake()
- {
- if (downDirection != null)
- {
- UpdateCachedSpriteRenderers(downDirection, ref cachedDownSpriteRenderers);
- if (cachedDownSpriteRenderers != null && cachedDownSpriteRenderers.Length > 0)
- {
- swingWeapon = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__swing weapon slot").sprite;
- thrustWeapon = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__thrust weapon slot").sprite;
- bowWeapon = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__bow weapon slot").sprite;
- skinColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "head").color;
- eyeShape = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "eyes").sprite;
- eyebrowShape = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "eyebrows").sprite;
- eyeColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "eye color").color;
- hairColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__hair slot").color;
- hair = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__hair slot").sprite;
- facialHair = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__facial hair slot").sprite;
- headwear = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__headwear slot").sprite;
- headwearColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__headwear slot").color;
- rightShoulder = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right shoulder slot").sprite;
- rightShoulderColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right shoulder slot").color;
- rightUpperArmEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right upper arm slot").sprite;
- rightUpperArmEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right upper arm slot").color;
- rightLowerArmEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right lower arm slot").sprite;
- rightLowerArmEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right lower arm slot").color;
- rightHandEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right hand slot").sprite;
- rightHandEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right hand slot").color;
- leftShoulder = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left shoulder slot").sprite;
- leftShoulderColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left shoulder slot").color;
- leftUpperArmEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left upper arm slot").sprite;
- leftUpperArmEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left upper arm slot").color;
- leftLowerArmEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left lower arm slot").sprite;
- leftLowerArmEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left lower arm slot").color;
- leftHandEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left hand slot").sprite;
- leftHandEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left hand slot").color;
- chestEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__chest slot").sprite;
- chestEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__chest slot").color;
- bodyEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__body slot").sprite;
- bodyEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__body slot").color;
- belt = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__belt slot").sprite;
- beltColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__belt slot").color;
- hipEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__hip slot").sprite;
- hipEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__hip slot").color;
- rightUpperLegEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right upper leg slot").sprite;
- rightUpperLegEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right upper leg slot").color;
- rightLowerLegEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right lower leg slot").sprite;
- rightLowerLegEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right lower leg slot").color;
- rightFootEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right foot slot").sprite;
- rightFootEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__right foot slot").color;
-
- leftUpperLegEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left upper leg slot").sprite;
- leftUpperLegEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left upper leg slot").color;
- leftLowerLegEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left lower leg slot").sprite;
- leftLowerLegEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left lower leg slot").color;
- leftFootEquipment = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left foot slot").sprite;
- leftFootEquipmentColor = GetSpriteRendererBySlotName(cachedDownSpriteRenderers, "__left foot slot").color;
- }
- }
- }
- void Update()
- {
- if (!Application.isPlaying)
- {
- if (downDirection != previousDownDirection)
- {
- Awake();
- previousDownDirection = downDirection;
- }
- UpdateSprites(true);
- }
- }
- public void UpdateSprites(bool updateColorOnly)
- {
- UpdateCachedSpriteRenderersForAllDirections();
- UpdateSpritesForDirection(cachedDownSpriteRenderers, "down", updateColorOnly);
- UpdateSpritesForDirection(cachedUpSpriteRenderers, "up", updateColorOnly);
- if (rightDirection != leftDirection && rightDirection != null)
- {
- UpdateSpritesForDirection(cachedLeftSpriteRenderers, "side", updateColorOnly);
- UpdateSpritesForDirection(cachedRightSpriteRenderers, "side", updateColorOnly);
- }
- else
- {
- UpdateSpritesForDirection(cachedLeftSpriteRenderers, "side", updateColorOnly);
- }
- }
- private void UpdateCachedSpriteRenderersForAllDirections()
- {
- UpdateCachedSpriteRenderers(downDirection, ref cachedDownSpriteRenderers);
- UpdateCachedSpriteRenderers(upDirection, ref cachedUpSpriteRenderers);
- UpdateCachedSpriteRenderers(leftDirection, ref cachedLeftSpriteRenderers);
- if (rightDirection != leftDirection)
- {
- UpdateCachedSpriteRenderers(rightDirection, ref cachedRightSpriteRenderers);
- }
- }
- private void UpdateCachedSpriteRenderers(GameObject directionGameObject, ref SpriteRenderer[] cachedSpriteRenderers)
- {
- if (directionGameObject != null)
- {
- if (cachedSpriteRenderers == null || cachedSpriteRenderers.Length == 0)
- {
- cachedSpriteRenderers = directionGameObject.GetComponentsInChildren<SpriteRenderer>(true);
- }
- }
- }
- private void UpdateSpritesForDirection(SpriteRenderer[] cachedSpriteRenderers, string direction, bool updateColorOnly)
- {
- if (cachedSpriteRenderers != null && cachedSpriteRenderers.Length > 0)
- {
- bool isMainDirection = direction == "down";
- bool updateSprites = isMainDirection || !updateColorOnly;
-
- SpriteRenderer swingWeaponSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__swing weapon slot");
- UpdateSprite(swingWeaponSlotSR, swingWeapon, swingWeaponSlotSR.color, direction, isMainDirection, updateSprites);
- SpriteRenderer thrustWeaponSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__thrust weapon slot");
- UpdateSprite(thrustWeaponSlotSR, thrustWeapon, thrustWeaponSlotSR.color, direction, isMainDirection, updateSprites);
- SpriteRenderer bowWeaponSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__bow weapon slot");
- UpdateSprite(bowWeaponSlotSR, bowWeapon, bowWeaponSlotSR.color, direction, isMainDirection, updateSprites);
-
- SpriteRenderer headSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "head");
- headSR.color = skinColor;
- SpriteRenderer eyesClosedSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "eyes closed");
- eyesClosedSR.color = new Color (skinColor.r, skinColor.g, skinColor.b, eyesClosedSR.color.a);
- SpriteRenderer eyebrowShapeSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "eyebrows");
- UpdateSprite(eyebrowShapeSR, eyebrowShape, hairColor, direction, isMainDirection, updateSprites);
- SpriteRenderer eyesSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "eye color");
- eyesSR.color = eyeColor;
- SpriteRenderer eyeshapeSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "eyes");
- UpdateSprite(eyeshapeSR, eyeShape, Color.white, direction, isMainDirection, updateSprites);
-
- SpriteRenderer hairSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__hair slot");
- UpdateSprite(hairSlotSR, hair, hairColor, direction, isMainDirection, updateSprites);
- SpriteRenderer facialHairSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__facial hair slot");
- UpdateSprite(facialHairSlotSR, facialHair, hairColor, direction, isMainDirection, updateSprites);
- SpriteRenderer headwearSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__headwear slot");
- UpdateSprite(headwearSlotSR, headwear, headwearColor, direction, isMainDirection, updateSprites);
-
- SpriteRenderer rightShoulderSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__right shoulder slot");
- UpdateSprite(rightShoulderSlotSR, rightShoulder, rightShoulderColor, direction, isMainDirection, updateSprites);
- SpriteRenderer rightUpperArmSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__right upper arm slot");
- UpdateSprite(rightUpperArmSlotSR, rightUpperArmEquipment, rightUpperArmEquipmentColor, direction, isMainDirection, updateSprites);
- SpriteRenderer rightLowerArmSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__right lower arm slot");
- UpdateSprite(rightLowerArmSlotSR, rightLowerArmEquipment, rightLowerArmEquipmentColor, direction, isMainDirection, updateSprites);
- SpriteRenderer rightHandSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__right hand slot");
- UpdateSprite(rightHandSlotSR, rightHandEquipment, rightHandEquipmentColor, direction, isMainDirection, updateSprites);
- SpriteRenderer rightUpperArmSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "right upper arm");
- rightUpperArmSR.color = skinColor;
-
- SpriteRenderer rightLowerArmSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "right lower arm");
- rightLowerArmSR.color = skinColor;
-
- SpriteRenderer rightHandSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "right hand");
- rightHandSR.color = skinColor;
-
- SpriteRenderer leftShoulderSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__left shoulder slot");
- UpdateSprite(leftShoulderSlotSR, leftShoulder, leftShoulderColor, direction, isMainDirection, updateSprites);
- SpriteRenderer leftUpperArmSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__left upper arm slot");
- UpdateSprite(leftUpperArmSlotSR, leftUpperArmEquipment, leftUpperArmEquipmentColor, direction, isMainDirection, updateSprites);
- SpriteRenderer leftLowerArmSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__left lower arm slot");
- UpdateSprite(leftLowerArmSlotSR, leftLowerArmEquipment, leftLowerArmEquipmentColor, direction, isMainDirection, updateSprites);
- SpriteRenderer leftHandSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__left hand slot");
- UpdateSprite (leftHandSlotSR, leftHandEquipment, leftHandEquipmentColor, direction, isMainDirection, updateSprites);
- SpriteRenderer leftUpperArmSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "left upper arm");
- leftUpperArmSR.color = skinColor;
-
- SpriteRenderer leftLowerArmSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "left lower arm");
- leftLowerArmSR.color = skinColor;
-
- SpriteRenderer leftHandSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "left hand");
- leftHandSR.color = skinColor;
-
- SpriteRenderer chestSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "chest");
- chestSR.color = skinColor;
-
- SpriteRenderer chestSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__chest slot");
- UpdateSprite(chestSlotSR, chestEquipment, chestEquipmentColor, direction, isMainDirection, updateSprites);
-
- SpriteRenderer bodySR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "body");
- bodySR.color = skinColor;
- SpriteRenderer bodySlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__body slot");
- UpdateSprite(bodySlotSR, bodyEquipment, bodyEquipmentColor, direction, isMainDirection, updateSprites);
- SpriteRenderer beltSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__belt slot");
- UpdateSprite(beltSlotSR, belt, beltColor, direction, isMainDirection, updateSprites);
- SpriteRenderer hipSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__hip slot");
- UpdateSprite(hipSlotSR, hipEquipment, hipEquipmentColor, direction, isMainDirection, updateSprites);
-
- SpriteRenderer rightUpperLegSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "right upper leg");
- rightUpperLegSR.color = skinColor;
- SpriteRenderer rightUpperLegSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__right upper leg slot");
- UpdateSprite(rightUpperLegSlotSR, rightUpperLegEquipment, rightUpperLegEquipmentColor, direction, isMainDirection, updateSprites);
- SpriteRenderer rightLowerLegSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "right lower leg");
- rightLowerLegSR.color = skinColor;
-
- SpriteRenderer rightLowerLegSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__right lower leg slot");
- UpdateSprite(rightLowerLegSlotSR, rightLowerLegEquipment, rightLowerLegEquipmentColor, direction, isMainDirection, updateSprites);
- SpriteRenderer rightFootSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "right foot");
- rightFootSR.color = skinColor;
- SpriteRenderer rightFootSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__right foot slot");
- UpdateSprite(rightFootSlotSR, rightFootEquipment, rightFootEquipmentColor, direction, isMainDirection, updateSprites);
-
- SpriteRenderer leftUpperLegSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "left upper leg");
- leftUpperLegSR.color = skinColor;
- SpriteRenderer leftUpperLegSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__left upper leg slot");
- UpdateSprite(leftUpperLegSlotSR, leftUpperLegEquipment, leftUpperLegEquipmentColor, direction, isMainDirection, updateSprites);
- SpriteRenderer leftLowerLegSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "left lower leg");
- leftLowerLegSR.color = skinColor;
- SpriteRenderer leftLowerLegSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__left lower leg slot");
- UpdateSprite(leftLowerLegSlotSR, leftLowerLegEquipment, leftLowerLegEquipmentColor, direction, isMainDirection, updateSprites);
- SpriteRenderer leftFootSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "left foot");
- leftFootSR.color = skinColor;
- SpriteRenderer leftFootSlotSR = GetSpriteRendererBySlotName(cachedSpriteRenderers, "__left foot slot");
- UpdateSprite(leftFootSlotSR, leftFootEquipment, leftFootEquipmentColor, direction, isMainDirection, updateSprites);
- }
- }
- private void UpdateSprite(SpriteRenderer spriteRenderer, Sprite sprite, Color color, string direction, bool isMainDirection, bool updateSprite)
- {
- #if UNITY_EDITOR
- if (spriteRenderer != null)
- {
- spriteRenderer.color = color;
- if (updateSprite)
- {
- if (isMainDirection)
- {
- spriteRenderer.sprite = sprite;
- }
- else
- {
- if (sprite != null)
- {
- string spriteName = sprite.name;
- spriteName = spriteName.Replace("down", direction);
- spriteName = spriteName.Replace("Down", direction.Substring(0,1).ToUpper() + direction.Substring(1, direction.Length - 1));
- string[] assets = UnityEditor.AssetDatabase.FindAssets(spriteName);
- for (int i = 0; i < assets.Length; i++)
- {
- string path = UnityEditor.AssetDatabase.GUIDToAssetPath(assets[0]);
- if (UnityEditor.AssetDatabase.GetMainAssetTypeAtPath(path) == typeof(Sprite))
- {
- Sprite loadedSprite = UnityEditor.AssetDatabase.LoadAssetAtPath<Sprite>(path);
- spriteRenderer.sprite = sprite;
- break;
- }
- else if (UnityEditor.AssetDatabase.GetMainAssetTypeAtPath(path) == typeof(Texture2D))
- {
- bool set = false;
- Object[] spriteArray = UnityEditor.AssetDatabase.LoadAllAssetsAtPath(path);
- for (int j = 0; j < spriteArray.Length; j++)
- {
- if (spriteArray[j].GetType() == typeof(Sprite) && spriteArray[j].name == spriteName)
- {
- spriteRenderer.sprite = spriteArray[j] as Sprite;
- set = true;
- break;
- }
- }
- if (set)
- {
- break;
- }
- }
- }
- }
- }
- }
- }
- #endif
- }
- private SpriteRenderer GetSpriteRendererBySlotName(SpriteRenderer[] cachedSpriteRenderers, string name)
- {
- for (int i = 0; i < cachedSpriteRenderers.Length; i++)
- {
- if (cachedSpriteRenderers[i].transform.parent.name == name)
- {
- return cachedSpriteRenderers[i];
- }
- }
- return null;
- }
- }