[240126]TIL

응징·2024년 1월 26일
0

TIL

목록 보기
24/36
post-thumbnail

잔소리 피하기 게임 구현

[오늘 한 일]

캐릭터 2단점프 구현
맵 배치 이어서

꼭지점에서 점프할때 중첩돼서 점프

저런 꼭지점에서 점프를 하다보면 점프가 중첩되서 엄청 높이 점프된다. 아무래도 옆면에서의 충돌과 위에서의 충돌이 중첩되서 생긴걸로 추측됨. 따라서 점프 사용이 리셋 되기전에 rigidbady2D의 velocity.y를 0으로 바꿔 주었다.

if (collision.gameObject.CompareTag("JumpGround"))
{
	f(JumpOn) return;

	var velocity = rigidbody.velocity;
	velocity.y = 0;
    rigidbody.velocity = velocity;

    JumpOn = true;
    Secondjump = false;
}

중첩되는 점프가 눈에 띄게 줄었으나 아직도 오류가 남아있었음.

ContactPoint2D GetContact 충돌 법선 가져오기

ContactPoint2D GetContact(int index)

ContactPoint2D GetContact(int index) 메서드는 Collision2D 클래스에 포함된 메서드로, 지정된 인덱스에 해당하는 충돌 지점(ContactPoint2D)을 반환한다.

private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("JumpGround"))
        {

            // 충돌 지점이 하나 이상 있는 경우
            if (collision.contacts.Length > 0)
            {
                ContactPoint2D contact = collision.contacts[0];

                // 충돌의 법선을 확인하여 충돌 방향 결정
                if (contact.normal.y > 0.9f && Mathf.Abs(contact.normal.x) < 0.1f)
                {
                    if (JumpOn) return;


                    var velocity = rigidbody.velocity;
                    velocity.y = 0;
                    rigidbody.velocity = velocity;

                    JumpOn = true;
                    Secondjump = false;
                }
            }
        }
    }

참고로 Mathf.Abs는 절대값을 가져오는 메소드이다.

if (contact.normal.y > 0.9f && Mathf.Abs(contact.normal.x) < 0.1f

이 경우 contact.normal.y 값이 양수이면서 contact.normal.x 값이 거의 0에 가까운 경우를 확인하는데 이것을 위에서 충돌한걸로 인지할 수 있다.

composite Collider2D 갇힘 현상

캐릭터가 바닥 타일안에 갇히는 현상이 일어났다.

처음에는 캐릭터의 점프의 빠르기를 조정하기 위해서 GravityScail을 10f로 설정해 놨는데 스케일이 너무 높아서 충돌체를 뚫는거라고 추측했다. 그래서 velocity의 값에 한계를 설정해줬다.

 var velocity = rigidbody.velocity;
        
        if(velocity.y < limitVelocityY)
        {
            velocity.y = limitVelocityY;
        }

그러나 조금도 해결되지 않았다.

튜터님이 말씀하시길 콜라이더는 원래 내부에도 채워져 있기 때문에 조금 뚫는데도 갇힐수는 없다고 한다. 그래서 왜 겉에만 충돌체가 있는지 확인하기위해 컴포넌트에서 composite Collider2D 를 확인했다.

Geometry Type 이 Outlines 여서 문제였던 거였다. Polygons로 해주면 콜라이더가 내부에도 채워진다.

&

[주말 할 일]
맵 다 배치하기
캐릭터 애니메이션

[공부 할 거]
ContactPoint2D contact 를 사용하지 않아도, Platform Effecter2D로 일방향 충돌 설정 해줄 수 있을거 같음. 따로 공부

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

0개의 댓글