using System; using System.Collections; using System.Collections.Generic; using UnityEngine; [Serializable] public class UnitSetUp { public UnitActionData actionData; // 动作配置 public GameObject unitControllerPrefab; public GameObject unitPrefab; public RuntimeAnimatorController animController; public string unitFolder; [HideInInspector] public GameObject unit; [HideInInspector] public GameObject unitController; } public class TestErika : MonoBehaviour { public UnitSetUp erika; public UnitSetUp monster; private void Awake() { SetupErika(); SetupMonster(); } void SetupErika() { erika.unitController = GameObject.Instantiate(erika.unitControllerPrefab); erika.unitController.transform.position = Vector3.zero; erika.unitController.transform.rotation = Quaternion.identity; erika.unit = GameObject.Instantiate(erika.unitPrefab); erika.unit.transform.position = Vector3.zero; erika.unit.transform.rotation = Quaternion.Euler(0, 90, 0); erika.unit.transform.SetParent(erika.unitController.transform); UnitController unitCtr = erika.unitController.GetOrAddComponent(); unitCtr.Initialize(erika.unit, erika.unitFolder); UnitRootMotion unitRootMotion = unitCtr.unitRootMotion; RootMotionProxy rootMotionProxy = erika.unit.GetOrAddComponent(); Animator animator = erika.unit.GetComponent(); //AnimatorOverrideController animCtr = new AnimatorOverrideController(erika.animController); //animCtr.name = erika.unitPrefab.name + " Override Controller"; //foreach(var anim in erika.actionData.actions) //{ // animCtr[anim.Key] = anim.Value; //} animator.runtimeAnimatorController = erika.animController; Debug.Assert(animator.runtimeAnimatorController is AnimatorOverrideController); unitCtr.pcState.ChangeState(PCState.EUnitState.Idle, new PCState.IdleParam(), true); } void SetupMonster() { monster.unitController = GameObject.Instantiate(monster.unitControllerPrefab); monster.unitController.transform.position = Vector3.zero; monster.unitController.transform.rotation = Quaternion.identity; monster.unit = GameObject.Instantiate(monster.unitPrefab); monster.unit.transform.rotation = Quaternion.Euler(0, 90, 0); monster.unit.transform.SetParent(monster.unitController.transform); UnitController unitCtr = monster.unitController.GetOrAddComponent(); unitCtr.Initialize(monster.unit, monster.unitFolder); UnitRootMotion unitRootMotion = unitCtr.unitRootMotion; RootMotionProxy rootMotionProxy = monster.unit.GetOrAddComponent(); Animator animator = monster.unit.GetComponent(); AnimatorOverrideController animCtr = new AnimatorOverrideController(monster.animController); animCtr.name = monster.unitPrefab.name + " Override Controller"; animator.runtimeAnimatorController = animCtr; unitCtr.monsterState.ChangeState(MonsterState.EUnitState.Idle, new MonsterState.IdleParam(), true); monster.unitController.transform.position = new Vector3(5, 0, 0); monster.unitController.transform.rotation *= Quaternion.Euler(0, 180, 0); } }