ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • UI 공격 & 대쉬 버튼
    연습 프로젝트/2D로그라이크 게임

     

    현재 작업 진행중인 영상 입니다.

    이번 작업을 진행 하면서, 초기 플랫폼을 명확히 타겟하고 작업을 진행해야 한다고 느꼈습니다.

     

    기존 Input으로 Horizontalleft shift를 입력 받아 공격과 대쉬를 구현하였었는데, 이를 버튼클릭으로 변경하다 보니

     

    점프 버튼과 플레이어 이동 조이스틱도 필요할 것으로 생각이 들었습니다.

     


     

    우선 작업 진행 방식은 기존 로직을 코루틴으로 변경 하는것으로 작업해 주었습니다.

    private void Update()
    {
        if (playerMovement.dashing == true) return;
        GetInputs();
        Attack();
    }
    private void GetInputs()
    {
        isAttack = Input.GetMouseButtonDown(0);
    }
    private void Attack()
    {
        timeSinceAttack += Time.deltaTime;
        if (isAttack && timeSinceAttack >= timeBtweenAttack)
        {
            timeSinceAttack = 0;
            playerAnimations.PlayerAttacking();
            if (isAttacking == false)
            {
                Hit(forwardCheck, forwardCheckPos);
                isAttacking = true;
            }
        }
    }

    기존 PlayerAttack 스크립트 입니다.

     

    마우스 버튼(왼쪽 클릭) 을 입력바다 조건이 실행이 되며, Update문 에서 함수가 실행되며 검사를 하고 있습니다.

     

    public void OnClickEventGetInputs()
    {
        if (!isAttack && !isAttacking)
        {
            isAttack = true;
            isAttacking = false;
            StartCoroutine(CorutineAttack());
        }
    }
    
    IEnumerator CorutineAttack()
    {
        if (!playerMovement.dashing)
        {
            while (isAttack)
            {
                timeSinceAttack += Time.deltaTime;
                if (timeSinceAttack >= timeBtweenAttack)
                {
                    if (!isAttacking && isAttack)
                    {
                        timeSinceAttack = 0;
                        playerAnimations.PlayerAttacking();
                        Hit(forwardCheck, forwardCheckPos);
                        isAttacking = true;
                        isAttack = false;
                    }
                }
                yield return null;
            }
        }
        else
        {
            isAttack = false;
        }
    }

     

    로직은 기존의 코드와 대부분 비슷합니다.

     

    가장 큰 차이점은 Update문이 사라진것과, StartCorutine 함수로 코루틴을 실행 시켜 준다는 점 입니다. 

     

    또한 기존 로직에서는 공격 버튼을 연속으로 빠르게 2번 이상 누를시, 1회 공격 모션을 한 뒤 뒤늦게 공격이 되는 버그를 발견했었습니다. 그리하여 플래그를 좀 더 명확히 관리하기 위해 조건문을 추가해 주었습니다.

    (이 부분에서 약간의 시간이 소요가 되었습니다. 가장 큰 문제의 원인은 isAttacking이 제대로 작동하지 않고 있었습니다.)

     


        public void StartDash()
        {
            if (Input.GetButtonDown("Dash") && canDash)
            {
                StartCoroutine("Dash");
            }
        }

    다음은 PlayerMovement 스크립트의 기존 함수 입니다.

     

    기존 코루틴으로 작업이 되어 있었으며, 조건문의 대쉬(Left Shift)를 입력 받는것 만 제외 하여주고 OnClickEvent에 사용하기 위하여 버튼에 연결을 시켜 주었습니다.

     

        public void OnClickEventStartDash()
        {
            if (canDash)
            {
                StartCoroutine("CorutineDash");
            }
        }

    변경 된 함수이며 StartCorutine으로 실행할

     

    IEnumerator CorutineDash()
    {
        canDash = false;
        dashing = true;
    
        playerAnimations.PlayerDashing();
    
        playerRigidbdy2D.gravityScale = 0;
        playerRigidbdy2D.velocity = new Vector2(transform.localScale.x * dashSpeed, 0);
    
        dashEffect.SetActive(true);
        yield return new WaitForSeconds(dashTime);
    
        playerRigidbdy2D.gravityScale = gravity;
    
        dashing = false;
        dashEffect.SetActive(false);
        yield return new WaitForSeconds(dashCooldown);
    
        canDash = true;
    }

    함수명만 변경된 Dash > CorutineDash() 함수는 기존 로직 그대로 사용하였습니다.

    마지막으로 버튼의 On Click() 에 연결 시켜 주는 모습입니다.

     


     

    현재 작업 구상은 스킬 > 이동(조이스틱,점프) > 몬스터 공격 및 패턴 > 레벨 디자인 > 디테일 작업 > 튜토리얼 과정에 필요한 스토리 및 부가적인 기능들을 순차적으로 작업해 나갈 생각입니다.

     

    감사합니다.

     


     

    역동적인 움직임과 약간의 컨트롤이 필요한 재미 요소를 추가하고 싶은데, 아이디어 기획 및 다양한 영상들을 참고해 봐야 겠습니다.

    '연습 프로젝트 > 2D로그라이크 게임' 카테고리의 다른 글

    UI 아이템 패널 - 물약  (0) 2024.06.09
    UI 정보 패널 & 미니맵  (0) 2024.06.08
    UI 기획 (1차)  (0) 2024.06.08
    몬스터 상태 구현 (Update)  (0) 2024.06.08
    몬스터 상태 구현  (0) 2024.06.07

    댓글

김효겸 / Tel. 010-7735-0580 / E-mail. dollzzang2@hanmail.net