1 minute read

작업 내용

버그 수정

공격할 때 공격 속도에 의한 대기 시간 중에 유닛이 달리기 애니메이션으로 되어있는 버그가 있었는데, 애니메이션에서 이를 판단하는 isMoving 파라미터를 공격할때는 꺼주고 적이 범위에서 벗어나거나 죽었을 때만 켜주었다.
UserUnitAction.cs :

public void Attack()
{
    animator.SetTrigger(userUnit.AnimOnAttack);
    if (isOnTheMove)
    {
        animator.SetBool(userUnit.AnimIsMoving, false);
        agent.isStopped = true;
    }
...
private void Update()
{
    // 공격 속도에 따른 시간 마다 Alert 상태면 공격 시도
    if (isAlert && targetEnemy != null && !targetEnemy.Dead && Time.time - lastAttackTime > stat.AttackSpeed.TotalValule 
        && (Vector3.Distance(targetEnemy.transform.position, transform.position) <= stat.AttackRange.TotalValule))
    {
        Attack();
    }
    
    if (targetEnemy != null && targetEnemy.Dead)
    {
        if (isOnTheMove)
        {
            agent.isStopped = false;
            animator.SetBool(userUnit.AnimIsMoving, true);
        }
        targetEnemy = null;
    }
}
...
public void OnEnemyExitRange(Enemy enemy)
{
    if (targetEnemy != null && targetEnemy == enemy)
    {
        if (!isTracking)
        {
            targetEnemy = null;
        }
        if (isOnTheMove)
        {
            userUnit.FlipToRight(targetPosition.x > transform.position.x);
        }
        agent.isStopped = false;
        animator.SetBool(userUnit.AnimIsMoving, true);
    }
}

활 투사체가 적에게 닿았을 때 데미지를 주도록 투사체에서 데미지 함수를 불러올 수 있게 해주었다.
Projectile.cs :

protected virtual void DealDamage()
{
    targetEnemy.TakeDamage(damage);
}

Arrow : Projectile 클래스 :

private void Update()
{
    if (shoot)
    {
        elapsedTime += Time.deltaTime;
        float progress = elapsedTime / flightDuration;

        // 현재 위치 계산
        targetPosition = targetEnemy.transform.position;
        Vector3 currentPosition = Vector3.Lerp(startPosition, targetPosition, progress);
        transform.position = currentPosition;

        // 방향 계산: 속도 벡터를 기반으로 화살의 방향 설정
        transform.right = Quaternion.Euler(0,0,90) * direction;

        // 목적지 도달했는지 확인
        if (progress >= 1)
        {
            DealDamage();
            Destroy(gameObject);
        }
    }
}

더블 클릭으로 같은 종류의 유닛끼리 선택이 되는 기능이 더블 클릭 사이 간격이 넓어도 적용이 되는 문제가 있었는데, 더블클릭 간격을 0.75 -> 0.2로 바꾸고 모든 다른 input system도 performed에서 실행 되게 바꿨다.

발표 준비

발표에 필요한 ppt 자료를 정리하고 프로젝트를 요약하여 발표 준비를 했다.
기타 readme와 시연영상 등은 다른 팀원들이 담당했다.

마무리

내일 중간 발표인데 발표만 하지 말고 코드도 정리할 준비를 해야겠다. 일단 아군 유닛과 적군 유닛의 마스터 유닛 클래스를 만들고 통일을 하는 것이 중요할듯 하다.