public void LoadWeapon(string weaponResource) { var weaponAnchor = TGToolTransferBone.CreateBone(transform, "Root/Bip/Hips/Spine/Chest/Neck/R Shoulder/R Upper Arm/R Lower Arm/R Hand/R Weapon Anchor", boneRoot, boneMap); for (int i = weaponAnchor.childCount - 1; i >= 0; i--) { Destroy(weaponAnchor.GetChild(i).gameObject); } GameObject weapon = Resources.Load <GameObject>(weaponResource); if (weapon != null) { if (weaponModel != null) { Destroy(weaponModel.gameObject); } if (bulletModel != null) { Destroy(bulletModel.gameObject); } customWeapon = Instantiate(weapon).transform; customWeapon.gameObject.name = weapon.name; customWeapon.gameObject.layer = LayerMask.NameToLayer("Player"); foreach (var t in customWeapon.transform.GetComponentsInChildren <Transform>()) { t.gameObject.layer = LayerMask.NameToLayer("Player"); } customWeapon.parent = weaponAnchor; customWeapon.localPosition = Vector3.zero; customWeapon.localRotation = Quaternion.Euler(0, 0, 0); weaponModel = customWeapon; bulletModel = customWeapon.Find("Bullet"); foreach (Transform t in customWeapon.GetComponentsInChildren <Transform>()) { if (t.name == "FXAnchor") { fxAnchor = t; } } var weaponAnimator = customWeapon.GetComponent <Animator>(); if (weaponAnimator != null) { weaponAnimator.gameObject.AddComponent <NTGAnimatorController>().Init(); } } }
public void LoadSpecialWeapon(string weaponResource) { var weaponAnchor = TGToolTransferBone.CreateBone(transform, "Root/Bip/S Weapon Anchor", boneRoot, boneMap); for (int i = weaponAnchor.childCount - 1; i >= 0; i--) { Destroy(weaponAnchor.GetChild(i).gameObject); } GameObject weapon = Resources.Load <GameObject>(weaponResource); if (weapon != null) { var customWeapon = Instantiate(weapon).transform; customWeapon.gameObject.name = weapon.name; customWeapon.gameObject.layer = LayerMask.NameToLayer("Player"); foreach (var t in customWeapon.transform.GetComponentsInChildren <Transform>()) { t.gameObject.layer = LayerMask.NameToLayer("Player"); } customWeapon.parent = weaponAnchor; customWeapon.localPosition = Vector3.zero; customWeapon.localRotation = Quaternion.Euler(0, 0, 0); foreach (Transform t in customWeapon.GetComponentsInChildren <Transform>()) { if (t.name == "FXAnchor") { sfxAnchor = t; } } var weaponAnimator = customWeapon.GetComponent <Animator>(); if (weaponAnimator != null) { weaponAnimator.gameObject.AddComponent <NTGAnimatorController>().Init(); } } }
public void LoadAvatar(string BodyId = "", string FaceId = "", string HairId = "", string WeaponId = "") { Dictionary <string, string> partMap = new Dictionary <string, string> { { "Body", BodyId }, { "Hair", HairId }, { "Face", FaceId }, { "Weapon", WeaponId } }; Dictionary <string, string> stateMap = new Dictionary <string, string> { { "Idle", "A0" }, { "Play", "B0" }, { "Walk", "C0" }, { "Standby", "D0" }, { "Hurt", "F0" }, { "Victory", "G0" }, { "Dead", "H0" }, { "Attack", "I0" }, { "Forward", "C0" }, { "Backward", "J0" }, { "Knock", "K0" }, { "Stun", "L0" }, { "Roll", "M0" }, }; if (aoc == null) { aoc = new AnimatorOverrideController(); aoc.name = "TGRoleOverrideAC"; aoc.runtimeAnimatorController = roleAC; } var smr = GetComponent <SkinnedMeshRenderer>(); if (smr != null) { DestroyImmediate(smr); } List <SkinnedMeshRenderer> smRenderers = new List <SkinnedMeshRenderer>(); foreach (var p in partMap) { if (p.Value == "") { continue; } var old = transform.Find(p.Key + "(Clone)"); if (old != null) { DestroyImmediate(old.gameObject); } var role = Resources.Load <GameObject>(p.Value); if (role != null) { Transform model = role.transform.FindChild(p.Key); if (model != null) { var obj = Instantiate(model.gameObject) as GameObject; obj.transform.parent = transform; obj.layer = LayerMask.NameToLayer("Player"); foreach (var t in obj.transform.GetComponentsInChildren <Transform>()) { t.gameObject.layer = LayerMask.NameToLayer("Player"); } SkinnedMeshRenderer render = obj.GetComponent <SkinnedMeshRenderer>(); //TGToolTransferBone.Transfer(ref render, transform); TGToolTransferBone.Create(render, transform, boneRoot, boneMap); smRenderers.Add(obj.GetComponent <SkinnedMeshRenderer>()); } } /* * foreach (var s in stateMap) * { * var load = Resources.Load<AnimationClip>(p.Value.Substring(0, 9) + "R" + s.Value); * if (load == null) * continue; * * if (aoc[p.Key + "-" + s.Key] != null) * { * Destroy(aoc[p.Key + "-" + s.Key]); * } * aoc[p.Key + "-" + s.Key] = Instantiate(load) as AnimationClip; * } */ } //CombineSkinnedMeshRenderer(smRenderers); //TGToolTransferBone.Create(GetComponent<SkinnedMeshRenderer>(), transform, boneRoot, boneMap); if (partMap["Weapon"] != "") { foreach (var s in stateMap) { var load = Resources.Load <AnimationClip>(partMap["Weapon"].Substring(0, 9) + "R" + s.Value); if (aoc["Leg" + "-" + s.Key] != null && aoc["Leg" + "-" + s.Key].name.Contains("(Clone)")) { Destroy(aoc["Leg" + "-" + s.Key]); } aoc["Leg" + "-" + s.Key] = Instantiate(load) as AnimationClip; if (aoc["Weapon" + "-" + s.Key] != null && aoc["Weapon" + "-" + s.Key].name.Contains("(Clone)")) { Destroy(aoc["Weapon" + "-" + s.Key]); } aoc["Weapon" + "-" + s.Key] = Instantiate(load) as AnimationClip; } //var weaponAnchor = transform.Find("Root/Hips/Spine/Chest/Neck/R Shoulder/R Upper Arm/R Lower Arm/R Hand/R Weapon Anchor"); var weaponAnchor = TGToolTransferBone.CreateBone(transform, "Root/Hips/Spine/Chest/Neck/R Shoulder/R Upper Arm/R Lower Arm/R Hand/R Weapon Anchor", boneRoot, boneMap); for (int i = weaponAnchor.childCount - 1; i >= 0; i--) { Destroy(weaponAnchor.GetChild(i).gameObject); } GameObject weapon = Resources.Load <GameObject>(partMap["Weapon"] + "C"); if (weapon != null) { if (weaponModel != null) { Destroy(weaponModel.gameObject); } if (bulletModel != null) { Destroy(bulletModel.gameObject); } customWeapon = ((GameObject)Instantiate(weapon)).transform; customWeapon.gameObject.layer = LayerMask.NameToLayer("Player"); foreach (var t in customWeapon.transform.GetComponentsInChildren <Transform>()) { t.gameObject.layer = LayerMask.NameToLayer("Player"); } customWeapon.parent = weaponAnchor; customWeapon.localPosition = Vector3.zero; customWeapon.localRotation = Quaternion.Euler(0, 0, 0); weaponModel = customWeapon; bulletModel = customWeapon.Find("Bullet"); fxAnchor = customWeapon.Find("FXAnchor"); weaponAnimator = customWeapon.GetComponent <Animator>(); weaponAnimator.applyRootMotion = false; weaponAnimator.cullingMode = AnimatorCullingMode.CullUpdateTransforms; AnimatorOverrideController weaponAoc = new AnimatorOverrideController(); weaponAoc.name = "TGWeaponOverrideAC"; weaponAoc.runtimeAnimatorController = commonAC; foreach (var s in stateMap) { var clip = Resources.Load <AnimationClip>(partMap["Weapon"].Substring(0, 15) + "C" + s.Value); if (clip != null) { if (weaponAoc["Weapon-" + s.Key] != null) { Destroy(weaponAoc["Weapon-" + s.Key]); } weaponAoc["Weapon-" + s.Key] = Instantiate(clip) as AnimationClip; } } weaponAnimator.runtimeAnimatorController = weaponAoc; } } if (animator != null) { DestroyImmediate(animator); } animator = gameObject.AddComponent <Animator>(); animator.avatar = roleAvatar; animator.applyRootMotion = false; animator.cullingMode = AnimatorCullingMode.CullUpdateTransforms; animator.runtimeAnimatorController = aoc; /* * GetComponent<Animator>().runtimeAnimatorController = null; * GetComponent<Animator>().runtimeAnimatorController = aoc; */ }