using System.Collections; using System.Collections.Generic; using UnityEngine; public partial class SaionjiScript : MonoBehaviour, IInteractable { HitBoxTest hitbox; Animator animator; public GameObject Go_PistolL; public GameObject Go_PistolR; public GameObject Go_Blade; public bool UsePistol; public bool UseBlade; public bool EnableAbilitySystem; public EffectHandler[] Effects; // Start is called before the first frame update void Start() { animator = GetComponent(); //animator.speed = 0; PhysicsWorld.Instance.AddAnimator(animator); Go_PistolL.SetActive(UsePistol); Go_PistolR.SetActive(UsePistol); Go_Blade.SetActive(UseBlade); GetAnimHash(); if (EnableAbilitySystem) SetupAbilities(); } private void Update() { //if (EnableAbilitySystem) // m_AbilitySystem.OnUpdate(); } // 更新顺序: // internal animator update -> OnAnimatorMove() -> physics // 角色最后的位置以物理系统为准(如果加入物理系统的话) // 如果后续有物理处理,会重写transform // 对于后续不受物理管理的动作,不需要修改transform void OnAnimatorMove() { Animator animator = GetComponent(); // animator.deltaPosition和animator.deltaRotation是animator做的root motion后的结果 // 在后面做一个硬性约束z=0,将角色限制在z=0平面上 if (animator) { 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; } } }