ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유니티2D 다운점프/아래점프 플랫폼 구현
    쾌락없는 책임 (공부)/Unity 2020. 12. 23. 11:23
    반응형
    거지같은 맥북의 녹화기능

    <플레이어의 스크립트중 점프와 아래점프>

            //JUMP
            isGround = Physics2D.OverlapCircle(pos.position, checkRadius, islayer);
            if (Input.GetKeyDown(KeyCode.Space) && jumpCount > 0 && !Input.GetButton("Vertical")) {
                rigid.velocity = Vector2.up * jumpPower;
            }
            if (Input.GetKeyUp(KeyCode.Space)) {
                jumpCount--;
            }
            if (isGround) {
                jumpCount = maxJump;
            }
    
            //DownJump
            if (Input.GetKeyDown(KeyCode.Space) && Input.GetButton("Vertical")){
                Debug.Log("아래점프");
                GameObject.FindWithTag("DownPlatform").GetComponent<DownPlatform>().ChangeLayer();
                Debug.Log("아래점프2");
            }

    <아래점프를 할 플랫폼에 있는 코드>

        public void ChangeLayer(){
            gameObject.layer = 15;
            StartCoroutine("ReturnLayer");
        }
        IEnumerator ReturnLayer(){
            yield return new WaitForSeconds(2f);
            gameObject.layer = 8;
        }

     

    <흐름도>

    1. 플레이어 방향기 아래/위를 누른 채 스페이스바(점프) 클릭

    2. DownPlatfom 이름을 가지는 오브젝트를 찾아 Layer을 15로 바꿔줌

       - 유니티 프로젝트 세팅에서 15번의 레이어(isTrigger)와 Player레이어는 충돌할 수 없게 해줌

    3. 2초 뒤 다시 레이어를 정상화

     

    <개선점>

    1. 지금은 플레이어의 점프를 플레이어 아래의 빈 오브젝트를 이용해 구현했지만 만일 다른 프로젝트를 만든다면 Ray를 이용한 점프를 구현할 것이고 그러면 점프 코드가 저렇게 되지는 않을 것이다.

      - 지금의 코드는 if 조건안에 뭐가 많이 들어가 있어서 복잡

     

    2. Ray로 한다면 Ray로 닫는 플랫폼 하나만 레이어를 바꿔서 만들 수 있을 것이다.

      - 그런데 이건 플랫폼으로 처리를 하고 있다 보니 오히려 플랫폼 전체를 트리거화 하는게 나을 수 있다.

     

    3. 플레이어가 지나간 후 일정 시간 뒤 레이어 리턴이 아닌 개선할 필요가 있음

      - 위 코드는 여러 다운플랫폼을 지나갈 때 문제가 생길 것 같음

     

     

    2020.12.23 작성완료

    반응형

    댓글

Designed by Tistory.