using Gallop; using Newtonsoft.Json.Linq; using RootMotion.Dynamics; using System.Collections; using System.Collections.Generic; using UnityEngine; public class UmaContainer : MonoBehaviour { public JObject CharaData; public GameObject Body; public GameObject Tail; public List TailTextures = new List(); public Animator UmaAnimator; public AnimatorOverrideController OverrideController; [Header("Face")] public List FacialClips = new List(); public FaceDrivenKeyTarget FaceDrivenKeyTargets; [Header("Generic")] public bool IsGeneric = false; public string VarCostumeIdShort, VarCostumeIdLong, VarSkin, VarHeight, VarSocks, VarBust; public List GenericBodyTextures = new List(); [Header("Mini")] public bool IsMini = false; public List MiniHeadTextures = new List(); [Header("Head Assembly")] public Transform UmaNeckBone; public Transform UmaHeadBone; public List Heads = new List(); public List HeadNeckBones = new List(); public List HeadHeadBones = new List(); private void LateUpdate() { if (Body != null && Heads.Count > 0) { if (UmaNeckBone == null) UmaNeckBone = FindBoneInChildren(Body.transform, "Neck"); if (UmaHeadBone == null) UmaHeadBone = FindBoneInChildren(Body.transform, "Head"); for (int i = 0; i < Heads.Count; i++) { HeadNeckBones[i].transform.SetPositionAndRotation(UmaNeckBone.position, UmaNeckBone.rotation); HeadHeadBones[i].transform.SetPositionAndRotation(UmaHeadBone.position, UmaHeadBone.rotation); } } } public static Transform FindBoneInChildren(Transform trans, string name) { foreach (Transform t in trans) { if (t.name == name) { return t; } else { Transform candidate = FindBoneInChildren(t, name); if (candidate != null) return candidate; } } return null; } public void OnDestroy() { if (TryGetComponent(out PuppetMaster t)) { Destroy(this); } else { Destroy(gameObject); } } }