쾌락없는 책임 (공부)/Unity

유니티2D 다운점프/아래점프 플랫폼 구현

허스크 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 작성완료

반응형