CustomRoleController.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. public class CustomRoleController : MonoBehaviour
  6. {
  7. private Animator ani;
  8. private SkinnedMeshRenderer body;
  9. public Transform[] Chest;
  10. public Transform[] UpperArmUp;
  11. public Transform[] UpperArmDown;
  12. public Transform[] UpperLegUp;
  13. public Transform[] UpperLegDown;
  14. public Transform[] LowerLegUp;
  15. public Transform[] LowerLegDown;
  16. private void Start()
  17. {
  18. ani = GetComponent<Animator>();
  19. body = GetComponentInChildren<SkinnedMeshRenderer>();
  20. var t1 = ani.GetBoneTransform(HumanBodyBones.LeftHand);
  21. var t2 = ani.GetBoneTransform(HumanBodyBones.LeftFoot);
  22. }
  23. private void Update()
  24. {
  25. UpdatePos();
  26. }
  27. private void UpdatePos()
  28. {
  29. var t = body.bounds.min;
  30. var offset = t.y - (-1.36f);
  31. var y = transform.position.y - offset;
  32. transform.SetPositionY(y * 0.2f + transform.position.y * 0.8f);
  33. }
  34. public void UpdateBoneScale(EditableBodyPart part,Vector3 scale,bool isKeep,float value)
  35. {
  36. CustomRoleUtility.UpdateBoneScale(ani, part,scale, isKeep, value);
  37. }
  38. public List<Transform> GetBonesTrans()
  39. {
  40. var bonesTrans = new List<Transform>();
  41. for (int i = 0; i < Enum.GetValues(typeof(HumanBodyBones)).Length - 1; i++)
  42. {
  43. var trans = ani.GetBoneTransform((HumanBodyBones)i);
  44. if (trans)
  45. {
  46. bonesTrans.Add(trans);
  47. }
  48. }
  49. return bonesTrans;
  50. }
  51. public void GetNormalAniBonesScale(ref Dictionary<string, Vector3> boneDic)
  52. {
  53. CustomRoleUtility.GetNormalAniBonesScale(ani,ref boneDic);
  54. }
  55. private Transform[] GetExtraAniBonesTrans(EditableBodyPart extraPart)
  56. {
  57. Transform[] targetTrans = null;
  58. switch (extraPart)
  59. {
  60. case EditableBodyPart.Chest:
  61. targetTrans = Chest;
  62. break;
  63. case EditableBodyPart.UpperArmUp:
  64. targetTrans = UpperArmUp;
  65. break;
  66. case EditableBodyPart.UpperArmDown:
  67. targetTrans = UpperArmDown;
  68. break;
  69. case EditableBodyPart.UpperLegUp:
  70. targetTrans = UpperLegUp;
  71. break;
  72. case EditableBodyPart.UpperLegDown:
  73. targetTrans = UpperLegDown;
  74. break;
  75. case EditableBodyPart.LowerLegUp:
  76. targetTrans = LowerLegUp;
  77. break;
  78. case EditableBodyPart.LowerLegDown:
  79. targetTrans = LowerLegDown;
  80. break;
  81. default:
  82. break;
  83. }
  84. return targetTrans;
  85. }
  86. public void GetExtraAniBonesScale(ref Dictionary<string, Vector3> boneDic,EditableBodyPart extraPart)
  87. {
  88. Transform[] targetTrans = GetExtraAniBonesTrans(extraPart);
  89. if(targetTrans != null)
  90. {
  91. for (int i = 0; i < targetTrans.Length; i++)
  92. {
  93. boneDic.Add(targetTrans[i].name, targetTrans[i].localScale);
  94. }
  95. }
  96. }
  97. public void GetExtraAniBonesRotate(ref Dictionary<string, Quaternion> boneDic, EditableBodyPart extraPart)
  98. {
  99. Transform[] targetTrans = GetExtraAniBonesTrans(extraPart);
  100. if (targetTrans != null)
  101. {
  102. for (int i = 0; i < targetTrans.Length; i++)
  103. {
  104. boneDic.Add(targetTrans[i].name, targetTrans[i].localRotation);
  105. }
  106. }
  107. }
  108. public void GetExtraAniBonesPosition(ref Dictionary<string, Vector3> boneDic, EditableBodyPart extraPart)
  109. {
  110. Transform[] targetTrans = GetExtraAniBonesTrans(extraPart);
  111. if (targetTrans != null)
  112. {
  113. for (int i = 0; i < targetTrans.Length; i++)
  114. {
  115. boneDic.Add(targetTrans[i].name, targetTrans[i].localPosition);
  116. }
  117. }
  118. }
  119. public void SetBonePos(string name,Vector3 value)
  120. {
  121. var bone = CustomRoleUtility.GetChild(transform,name);
  122. if(bone)
  123. {
  124. bone.transform.localPosition = value;
  125. }
  126. }
  127. public void SetBoneRot(string name, Quaternion value)
  128. {
  129. var bone = CustomRoleUtility.GetChild(transform, name);
  130. if (bone)
  131. {
  132. bone.transform.localRotation = value;
  133. }
  134. }
  135. public void SetBoneScale(string name, Vector3 value)
  136. {
  137. var bone = CustomRoleUtility.GetChild(transform, name);
  138. if (bone)
  139. {
  140. bone.transform.localScale = value;
  141. }
  142. }
  143. }