[Projects]/[Unity] 인내의 숲(2024.03)

[Unity] 장애물과 충돌한 캐릭터 밀려나게(튕겨나가게) 하는 방법

Semincolon 2024. 6. 15. 10:11

[개요]

  상자를 밟으며 점프하던 캐릭터가 장애물과 충돌하게 되면 튕겨나가게끔 구현해야 한다. 이때 장애물의 오른쪽에 충돌하면 캐릭터도 오른쪽으로 튕겨나가고 왼쪽에 충돌하면 왼쪽으로 튕겨나가도록 설정하는 것이 일반적인 경우이다.


[해결 방법]

  1. 장애물에 태그를 설정해야 하는데 나는 `Obstacle`이라는 태그를 만들어서 설정해주었다. 그리고 `Collider2D`를 적용해줘야 하는데 내가 적용할 장애물은 톱니 모양이라 `Circle Collider 2D`를 적용해주었다.

 

  2. 캐릭터에 적용할 `Player.cs` 스크립트에 `OnCollisionEnter2D` 메서드를 구현해준다. `dirX`는 캐릭터의 x축 방향과 충돌한 장애물의 x축 방향을 비교해서 왼쪽에서 충돌하면 왼쪽으로 튕겨나가게 하고, 오른쪽으로 충돌하면 오른쪽으로 튕겨나가도록 설정하는 부분이다. `튕겨나갈 정도`와 `튕겨나갈 힘`은 원하는 값으로 설정해주면 된다.

void OnCollisionEnter2D(Collision2D collision) {
	if (collision.gameObject.CompareTag("Obstacle")) {
    	int dirX = transform.position.x - collision.transform.position.x > 0 ? (튕겨나갈 정도) : -(튕겨나갈 정도);
        rb.AddForce(new Vector2(dirX, (튕겨나갈 정도)) * (튕겨나갈 힘), ForceMode2D.Impulse);
    }
}

끝!