[240125]TIL

응징·2024년 1월 25일
0

TIL

목록 보기
23/36
post-thumbnail

잔소리 피하기 게임 구현

[오늘 한일]

맵 배치 - 아직 초반, 내일도 이어서 계속
플레이어 이동 - 끼임 현상 해결
플레이어 점프 - 버그 현상 해결

간혹 2단 점프가 됨

허공에서 2단 점프가 되지 않도록 이미 bool 값을 이용해 점프하고 있는 도중엔 바닥을 밟기 전까지 점프하지 못하게 막았으나, 간혹 빠르게 점프키를 누르다보면 2단점프가 되버린다.

수정전

 private void OnCollisionEnter2D(Collision2D collision)
    {
        bJump = true;
    }

수정후

private void OnCollisionEnter2D(Collision2D collision)
{
   	if (bJump) return;
	Invoke("JumpOn", 0.05f);
}

private void JumpOn()
{
	bJump = true;
}

혹시라도 처음 충돌했을때 떨어지는 미세한 차이로 인해 점프가 중복되나 싶어서 bJump bool 값을 점프 가능하게 만드는데 0.05초에 시간차를 줘봤다.

2단 점프 되는 횟수가 확연하게 줄었으나 완전히 해결 되지 않았다.

왜 이렇게 점프가 중첩이 되는지 알아본 결과 원인은 TileCollider문제로 tile콜라이더는 하나의 타일에 맞춰 콜라이더를 만들기 때문인걸 알아냈다.

Composite Collider2D

따라서 Composite Collider2D 컴포넌트를 추가해준다. Composite Collider2D는 물리 시스템을 최적화하고 성능을 향상시키기 위한 컴포넌트인데 여러 개의 콜라이더를 하나로 결합하여 하나의 큰 콜라이더로 만들어주는 역할을 해준다. 이번 경우에는 Tile콜라이더를 결합하였고 미세한 끼임 현상을 방지해준다.

Composite Collider2D로는 캐릭터 이동환경이 개선이 되지만 결과적으로 캐릭터가 점프할때 벽에 붙는 현상은 해결이 안된다.

벽에 붙는 현상

캐릭터가 벽에 붙는 현상이 생김. 아무래도 Rigidbody2D에 있는 마찰력 때문인거 같다. 처음에는 그래서 velocty를 vector2.Zero로 만들었으나, 벽에 붙는 현상이 줄긴 했어도 완전히 해결 하지는 못했다.

ground에 2개의 컴포넌트를 달아서 해결

platform Efector2D

콜라이더의 일방향 충돌, 부분 마찰력/반발력을 제거할 수 있는 컴포넌트다. Rigidbody2D에 있는 마찰력을 제거하기 위해서 이번엔 사용했다.

마찰력을 제거하기 위해선 먼저 이전 콜라이더에서 (이번의 경우 Composite Collider2D) UsedByEffector을 체크해줘야 한다.

여기서 Use One Way를 체크 해제 해줘야 하는데, 이 프로피티는 일방향 충돌에 대해 처리하기 위해 사용되기 때문에 이번 목적에는 필요없다.

&

[내일 할일]

맵 배치 완료( 장애물, 움직이는 플랫폼 제외)

[팀원들과 상의]
캐릭터 2단점프 건의
글자 크기를 어느정도에서 그리고 량을 얼만큼 뿌릴건지 상의
고정 잔소리 생성 여부 확인

[튜터님의 조언]

데이터는 웬만해선 메소드 내부에서 생성하지 말고 start때 초기화 해주고 두번이상 사용하는 데이터면 꼭 start에서 초기화하기(매번 생성하게 되면 안좋음)

profile
Unity 개발 위주로 정리합니다

0개의 댓글