123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using DG.Tweening;
- public class CustomRoleController : MonoBehaviour
- {
- private Animator ani;
- private SkinnedMeshRenderer body;
- public Transform[] Chest;
- public Transform[] UpperArmUp;
- public Transform[] UpperArmDown;
- public Transform[] UpperLegUp;
- public Transform[] UpperLegDown;
- public Transform[] LowerLegUp;
- public Transform[] LowerLegDown;
- private void Start()
- {
- ani = GetComponent<Animator>();
- body = GetComponentInChildren<SkinnedMeshRenderer>();
- var t1 = ani.GetBoneTransform(HumanBodyBones.LeftHand);
- var t2 = ani.GetBoneTransform(HumanBodyBones.LeftFoot);
- }
- private void Update()
- {
- UpdatePos();
- }
- private void UpdatePos()
- {
- var t = body.bounds.min;
- var offset = t.y - (-1.36f);
- var y = transform.position.y - offset;
- transform.SetPositionY(y * 0.2f + transform.position.y * 0.8f);
- }
- public void UpdateBoneScale(EditableBodyPart part,Vector3 scale,bool isKeep,float value)
- {
- CustomRoleUtility.UpdateBoneScale(ani, part,scale, isKeep, value);
- }
- public List<Transform> GetBonesTrans()
- {
- var bonesTrans = new List<Transform>();
- for (int i = 0; i < Enum.GetValues(typeof(HumanBodyBones)).Length - 1; i++)
- {
- var trans = ani.GetBoneTransform((HumanBodyBones)i);
- if (trans)
- {
- bonesTrans.Add(trans);
- }
- }
- return bonesTrans;
- }
- public void GetNormalAniBonesScale(ref Dictionary<string, Vector3> boneDic)
- {
- CustomRoleUtility.GetNormalAniBonesScale(ani,ref boneDic);
- }
- private Transform[] GetExtraAniBonesTrans(EditableBodyPart extraPart)
- {
- Transform[] targetTrans = null;
- switch (extraPart)
- {
- case EditableBodyPart.Chest:
- targetTrans = Chest;
- break;
- case EditableBodyPart.UpperArmUp:
- targetTrans = UpperArmUp;
- break;
- case EditableBodyPart.UpperArmDown:
- targetTrans = UpperArmDown;
- break;
- case EditableBodyPart.UpperLegUp:
- targetTrans = UpperLegUp;
- break;
- case EditableBodyPart.UpperLegDown:
- targetTrans = UpperLegDown;
- break;
- case EditableBodyPart.LowerLegUp:
- targetTrans = LowerLegUp;
- break;
- case EditableBodyPart.LowerLegDown:
- targetTrans = LowerLegDown;
- break;
- default:
- break;
- }
- return targetTrans;
- }
- public void GetExtraAniBonesScale(ref Dictionary<string, Vector3> boneDic,EditableBodyPart extraPart)
- {
- Transform[] targetTrans = GetExtraAniBonesTrans(extraPart);
- if(targetTrans != null)
- {
- for (int i = 0; i < targetTrans.Length; i++)
- {
- boneDic.Add(targetTrans[i].name, targetTrans[i].lossyScale);
- }
- }
- }
- public void GetExtraAniBonesRotate(ref Dictionary<string, Quaternion> boneDic, EditableBodyPart extraPart)
- {
- Transform[] targetTrans = GetExtraAniBonesTrans(extraPart);
- if (targetTrans != null)
- {
- for (int i = 0; i < targetTrans.Length; i++)
- {
- boneDic.Add(targetTrans[i].name, targetTrans[i].localRotation);
- }
- }
- }
- public void GetExtraAniBonesPosition(ref Dictionary<string, Vector3> boneDic, EditableBodyPart extraPart)
- {
- Transform[] targetTrans = GetExtraAniBonesTrans(extraPart);
- if (targetTrans != null)
- {
- for (int i = 0; i < targetTrans.Length; i++)
- {
- boneDic.Add(targetTrans[i].name, targetTrans[i].localPosition);
- }
- }
- }
- public void SetBonePos(string name,Vector3 value)
- {
- var bone = CustomRoleUtility.GetChild(transform,name);
- if(bone)
- {
- bone.transform.localPosition = value;
- }
- }
- public void SetBoneRot(string name, Quaternion value)
- {
- var bone = CustomRoleUtility.GetChild(transform, name);
- if (bone)
- {
- bone.transform.localRotation = value;
- }
- }
- public void SetBoneScale(string name, Vector3 value)
- {
- var bone = CustomRoleUtility.GetChild(transform, name);
- if (bone)
- {
- bone.transform.localScale = value;
- }
- }
- public void SetBoneWorldScale(string name, Vector3 value)
- {
- var bone = CustomRoleUtility.GetChild(transform, name);
- if(bone == null)
- {
- Debug.Log("不存在此骨骼 : " + name);
- return;
- }
- bone.DOScale(value, 0);
- }
- }
|