개발/Unity

유니티 3D 간보기 - 골드메탈 3D강좌:코루틴으로 근접공격 구현, Trail Renderer 사용.

huiyu 2022. 2. 6. 19:50

근접 공격 강좌

https://youtu.be/Zfoyagdz1y0

 

Weapon.cs

변수 생성.

    public enum Type { Melee, Range };
    public Type type;
    public int damage;
    public float rate;
    public BoxCollider meleeArea;
    public TrailRenderer trailEffect;

Player가 장착한 무기에 스크립트 추가, 변수 초기값 넣기
 - Damage : 25, Rate : 0.4, MeleeArea : 무기의 충돌 영역(BoxCollider), Trail Effect : 무기에 추가할 Trail Effect

- Trail Effect: 잔상 효과, 해머를 휘두를 때 남는 잔상을 만든다.

  > 기본 값들 설정, 그래프는 점점 변화하는 잔상의 모양, 아래로 향하게 하면 줄어든다.
   Time, Min Vertex Distance로 잔상의 시간과 모양을 조절한다.
   Color는 잔상의 색상
   Materials를 Defalut-Line으로 설정

아래와 같이 Weapon의 근접공격 로직을 코루틴으로 완성한다.

    public void Use()
    {
        if(type == Type.Melee)
        {
            StopCoroutine("Swing");
            StartCoroutine("Swing");
        }
    }

    IEnumerator Swing()
    {
        //1
        yield return new WaitForSeconds(0.1f);//0.1f 대기
        meleeArea.enabled = true;
        trailEffect.enabled = true;
        //2
        yield return new WaitForSeconds(0.3f);//0.3f 대기
        meleeArea.enabled = false;
        //3
        yield return new WaitForSeconds(0.3f);//0.3f 대기
        trailEffect.enabled = false;
    }

 코루틴은 일정한 작업을 순서대로 시간간격을 두고 진행할 때 사용할 수 있다.
 yield return null;로 하면 1프레임 대기
 yield return WaitForSecond()는 설정한 시간만큼 대기
 yield break;는 코루틴 종료
StopCoroutine() : 실행중인 코루틴 멈추기
StartCoroutine() : 코루틴 실행

완성한 Use()함수는 Player가 공격을 수행할 때 호출.

    void Attack()
    {
        if (equipWeapon == null)
        {
            return;
        }
        fireDelay += Time.deltaTime;
        isFireReady = equipWeapon.rate < fireDelay;

        if(fDown && isFireReady && !isDodge && !isSwap )
        {
            equipWeapon.Use();
            animator.SetTrigger("doSwing");
            fireDelay = 0;
        }
    }

 > 아이템을 장착시에만 동작. 무기에 설정한 Rate를 기준으로 FireReady상태가 되었을 때, fDown(Fire1)키가 눌렸을 때 동작. doSwing 트리거를 애니메이션에 동작시켜 캐릭터 동작 애니메이션을 수행하며, 만들어둔 잔상효과를 enable한다.

완성!!

근접공격 구현 & 잔상효과 끗

728x90
반응형