using System.Collections;
using UnityEngine;
public class ButtonsUI : MonoBehaviour
{
private PlayerController _playerController;
private bool isPointerDown;
private float clickInterval = 0.2f;
private void Awake()
{
_playerController = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerController>();
}
public void ClickButtonAttack()
{
_playerController.OnClick();
}
public void OnPointerDown()
{
isPointerDown = true;
StartCoroutine(ClickCoroutine());
}
public void OnPointerUp()
{
isPointerDown = false;
StopCoroutine(ClickCoroutine());
}
IEnumerator ClickCoroutine()
{
while (isPointerDown)
{
_playerController.OnClick();
yield return new WaitForSeconds(clickInterval);
}
}
}
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private CharacterController characterController;
public PlayerStatManager playerStatManager;
public SkillManager skillManager;
private Animator animator;
private Joystick controller;
private MoveObject moveObject;
//Attack
[SerializeField] private float cooldownTime = 2f;
private float nextAttackTime = 0f;
private static int COMBOSTACK = 0;
private float lastClickTimed = 0f;
private float maxComboDelay = 1f;
#region Animator
private static readonly int MOVE_SPEED_HASH = Animator.StringToHash("MoveSpeed");
private static readonly int Attack01 = Animator.StringToHash("Attack01");
private static readonly int Attack02 = Animator.StringToHash("Attack02");
private static readonly int Attack03 = Animator.StringToHash("Attack03");
private static readonly int Attack04 = Animator.StringToHash("Attack04");
#endregion
private void Awake()
{
Initialize();
}
private void Initialize()
{
characterController = GetComponent<CharacterController>();
animator = GetComponentInChildren<Animator>();
controller = FindObjectOfType<Joystick>();
moveObject = GetComponent<MoveObject>();
}
private void Update()
{
AttackUpdate();
UpdateMovement();
CheckHitWall();
}
private void UpdateMovement()
{
float moveSpeed = controller.Direction.magnitude;
animator.SetFloat(MOVE_SPEED_HASH, moveSpeed);
}
#region Attack
private void AttackUpdate()
{
if (animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.7f && animator.GetCurrentAnimatorStateInfo(0).IsName("Attack01"))
animator.SetBool(Attack01, false);
if (animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.7f && animator.GetCurrentAnimatorStateInfo(0).IsName("Attack02"))
animator.SetBool(Attack02, false);
if (animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.7f && animator.GetCurrentAnimatorStateInfo(0).IsName("Attack03"))
animator.SetBool(Attack03, false);
if (animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.7f && animator.GetCurrentAnimatorStateInfo(0).IsName("Attack04"))
{
animator.SetBool(Attack04, false);
COMBOSTACK = 0;
}
if (Time.time - lastClickTimed > maxComboDelay)
COMBOSTACK = 0;
}
public void OnClick()
{
if (Time.time > nextAttackTime)
{
lastClickTimed = Time.time;
COMBOSTACK++;
if (COMBOSTACK == 1)
{
//스매쉬 사운드
animator.SetBool(Attack01, true);
}
COMBOSTACK = Mathf.Clamp(COMBOSTACK, 0, 4);
if (COMBOSTACK >= 2 && animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.7f && animator.GetCurrentAnimatorStateInfo(0).IsName("Attack01"))
{
animator.SetBool(Attack01, false);
animator.SetBool(Attack02, true);
}
if (COMBOSTACK >= 3 && animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.7f && animator.GetCurrentAnimatorStateInfo(0).IsName("Attack02"))
{
animator.SetBool(Attack02, false);
animator.SetBool(Attack03, true);
}
if (COMBOSTACK >= 4 && animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 0.7f && animator.GetCurrentAnimatorStateInfo(0).IsName("Attack03"))
{
animator.SetBool(Attack03, false);
animator.SetBool(Attack04, true);
}
}
}
#endregion