관리 메뉴

도드넷

도트 아트#3 - 유니티 공격 이동 시스템을 만들어보자 본문

창고/나만의 게임 제작

도트 아트#3 - 유니티 공격 이동 시스템을 만들어보자

도드! 2016. 8. 14. 20:27
반응형





도드의 도트 아트#3 - 유니티 공격 이동 시스템을 만들어보자


ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ엌ㅋㅋㅋ 이번에는 공격-이동 시스템도 혼자 만듬ㅋㅋㅋ


생각보다 고려해야할것도 많고 복잡했는데


그냥 생각하기로는


이동은 해당 포인트까지 가면되고 공격은 사정거리까지 간다음 멈춰서 치게하면 되지않나?


말이 쉽지ㅅㅂ


공격중에 중복명령 하달에대한 처리하고 공격사거리에서 멈추는거하고 공격 쿨다운 공속시스템까지 만들어야됬음.



1. 이동 명령을 구분한다.

- 적을 클릭할경우 공격-이동으로 이동중 사거리 힛박스에 도달하면 캐릭터는 멈춘다.

- 적이 아닌 일반 지형이나 공백을 클릭할경우 보통-이동으로 충돌해서 STOP 명령이 나오기전까지 그냥 이동한다.


힛박스 도달 메소드 :: OnTriggerStay2D 를 이용한다.


void OnTriggerStay2D(Collider2D collider)
    {
        if (collider.gameObject == Target)
        {
            Inrange = true;
        }
        else
        {
            Inrange = false;
        }
    }


해당 객체에 존재하는 트리거에 충돌이 발생하면 발동되는 함수이다.


2. "공격중" 플래그를 사용한다.

- 공격-이동 명령으로 목적지에 도달하면 일단 멈추고 공격 쿨다운이 "온"이면 평타를 시전하고 이후 공격 쿨다운을 "오프" 시킨다. 동시에 "공격중" 이라는 플래그를 세워서 추가적 공격-이동을 막음.


공격중이라는 다음의 경우에 오프됨.

1) 플래그는 유닛이 아닌 배경을 클릭.

2) 새로운 적을 클릭할경우 제거되서 움직이게 함.

3) 해당 타겟 적이 사망 (기획중)


3. 멈춤 이벤트

- 만약 블록에 속하는 오브젝트와 콜라이더 겹쳐있으면 속도를 줄이고 받은 명령을 "멈춤"으로 설정한다. 생각해보면 그럼 벽에 닿으면 아예 못움직일지모른다고 볼수있지만 빨리벗어나 괜찮은듯하다.


void OnCollisionStay2D(Collision2D coll)
    {
        if (coll.gameObject.tag == "Blocks")
        {
            speed = 0;
            GetComponent<Animator>().SetInteger("AnimNumber", 0);
            current_order = "Stop";
        }
    }


4. 평타 쿨다운 시스템

 - 도트 그래픽은 모션을 느리게 할수없으므로 공격1회 이후 쉬는 타이밍을 두는 방식으로 함 (메이플 참고)


            // 공격명령으로 목적지에 도착했습니다.
            if (current_order == "Attack" && Inrange)
            {

                speed = 0;

                // 공격 이펙트
                if (ACD_ON)
                {
                    GetComponent<Animator>().SetInteger("AnimNumber", 2);
                    ACD_ON = false;
                    CCD = 0.0f;
                    isattacking = true;
                }
            }


/// 쿨다운 시스템 ↓


       if (CCD <= ACD && !ACD_ON)
        {
            CCD = CCD + (1.0f / 60.0f);
        }

        if (CCD >= ACD && !ACD_ON)
        {
            ACD_ON = true;
        }



미친 머리터질뻔ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ그래도 유니티니까 자료도 많고 만들기 쉽고 눈으로 바로바로 확인할수있고 이해가 쉬운 고급언어로 만들어서 그렇지 아오 내가 자바스크립트 맨땅 해딩하던거 생각하면 이정도야 뭐 후ㅜㅜㅜ




반응형
Comments