using System.Collections; using System.Collections.Generic; using UnityEngine; public partial class ArmorSoldierScript : Avatar, IInteractable { public Animator m_Animator; void Awake() { m_Animator = GetComponent(); } private void Start() { base.Init(); SetupAnim(); SetupStates(); } private void OnAnimatorMove() { Animator animator = GetComponent(); AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0); // animator.deltaPosition和animator.deltaRotation是animator做的root motion后的结果 // 在后面做一个硬性约束z=0,将角色限制在z=0平面上 if (stateInfo.IsTag("IgnoreRootMotion")) { // ignore root motion //Debug.Log("ignore root motion "); } else { Vector3 position = transform.position; position.x += animator.deltaPosition.x; position.y += animator.deltaPosition.y; transform.position = position; // animation clip导入设置旋转一般上设置为baked inpose,不需要手动限制 transform.rotation *= animator.deltaRotation; } } public void Hurt() { } public override void OnHurt(HurtInfo hurtInfo) { base.OnHurt(hurtInfo); Hurt(); } }