using System.Collections; using UnityEngine; using Sirenix.OdinInspector; using DG.Tweening; public class attackTest : MonoBehaviour { public Animator animator = null; public int AttackLayerIndex = 2; public int AttackCount = 3; private bool _canAttack = true; private float _attackWeight = 0f; private float _attackIdle = 0f; private int _attackType = 0; private IEnumerator _attackRoutine = null; private void Awake() => _attackRoutine = AttackIdle(); void Update() { animator.SetLayerWeight(AttackLayerIndex, _attackWeight); animator.SetFloat("Idle", _attackIdle); }//Update() end [Button] public async void Attack() { if (_canAttack is false) return; StopCoroutine(_attackRoutine); DOTween.Kill(_attackWeight); _attackRoutine = AttackIdle(); StartCoroutine(_attackRoutine); _canAttack = false; _attackType = _attackType >= AttackCount ? 0 : _attackType; animator.SetInteger("AttackType", _attackType); animator.SetTrigger("Attack"); DOTween.To(()=> _attackWeight, x=> _attackWeight = x, 1f, 0.5f); if(!await Tasks.Delay(0.8f)) return; DOTween.To(()=> _attackWeight, x=> _attackWeight = x, 0f, 0.5f); _attackType++; _canAttack = true; }//Attack() end private IEnumerator AttackIdle() { DOTween.Kill(_attackIdle); DOTween.To(()=> _attackIdle, x=> _attackIdle = x, 1f, 0.5f); yield return new WaitForSeconds(5.0f); DOTween.To(()=> _attackIdle, x=> _attackIdle = x, 0f, 0.5f); }//Coroutine() end }