unity05 중력/충돌

2026. 2. 10. 02:04·공부

* 유니티는 중력을 사용하면, 오브젝트를 직접 transform.Translate으로 매 프레임마다 움직이지 않아도 된다

그러나, 세부적인 제어가 필요한 경우, Translate 메서드를 사용한다

 

[충돌 제어]

- 오브젝트끼리 충돌하는지 판정하고 충돌 후 움직임을 정한다

- 충돌 판정 알고리즘은 복잡 -> 오브젝트를 원형이라 가정하여 단순화

   -  충돌 판정 알고리즘: 피타고라스 정리 활용해 두 원(오브젝트)의 중심끼리 거리가 두 원의 반지름의 합보다 작아지면 충돌했다고 판단

   - 오브젝트의 magnitude 메서드를 사용한다

 

[Physics 를 활용해 오브젝트에 중력 적용하기]

** Physics: unity 표준 물리 엔진 (충돌, 마찰, 낙하 등을 계산하는 시뮬레이션 용 라이브러리)

 

[Physics의 구성]

- Rigidbody 컴포넌트: 중력/마찰력 등 힘 계산

- Collider 컴포넌트: 물체의 충돌 판정 (충돌 판정 대상인 모든 물체에 적용되어야 함. Rigidbody는 한 쪽에만 적용되어도 됨)

-> Physics를 사용하면 오브젝트에 이 두가지 컴포넌트가 적용됨

 

[Physics 적용하기]

- 적용할 오브젝트 선택 > Inspector 창 > Add Component > physics 2D > Rigidbody 2D / Box or Circle Collider 

  ** 중력 영향 받지 않도록 설정: Rigidbody 2D 컴포넌트 > Body Type > Kinematic 설정

 

[Collider 컴포넌트 정교화]

- 이동하는 플레이어: 캡슐형 콜라이더 사용

   * 콜라이더의 모양대로 콜라이더의 테두리 선끼리 충돌 감지를 하기 때문에 바닥의 낮은 턱 등을 넘어짐 없이 지나갈 수 있음

- 캡슐형 콜라이더 제작: 박스형 콜라이더의 위아래로 원형 콜라이더를 붙여서 제작 

  * 원형 콜라이더의 y축 offset을 박스형 콜라이더 높이의 절반만큼 낮춘다

  * 외부에서 힘을 받아 넘어지지 않도록 Constraints > Freeze Rotation 에 체크 -> 화면 안으로 들어가는 Z축 주위의 회전을 방지한다

- 충돌 시작/충돌 중/충돌 종료 상태 별 호출되는 메서드: OnCollision Enter/Stay/Exit 2D

- 충돌(만남) 감지 & 통과시키기:

   a. 오브젝트 Inspector > Box Collide 컴포넌트 > is Trigger 체크

   b. OnTriggerEnter2D 메서드 정의 (input: 충돌 상대의 collider) -> 충돌 감지 시 호출되는 메서드이다

   * 충돌 시작/충돌 중/충돌 종료 상태 별 호출되는 메서드: OnTrigger Enter/Stay/Exit 2D

   

[컨트롤러 스크립트로 사용자 입력을 캐릭터 이동으로 연결]

* 좌표를 직접 변경하여 이동 X

* 힘을 가해서 이동시킴 (위치 계산은 physics가 함)

 

[힘을 가하는 메서드]

- AddForce(transform.힘의 방향*힘의 크기)

   * 힘의 방향= up(=0,1,0), right(=1,0,0) -> 아래, 왼쪽 방향으로 이동하려면 -1을 곱해주면 된다

   * 매 프레임마다 사용한다면, 물체가 가속한다

- 중력의 크기 조절: 플레이어 오브젝트 > Inspector > Rigidbody 컴포넌트 > Gravity Scale 수정

 

[스프라이트의 방향 반전]

- 스프라이트를 x축 방향으로 배율의 1 or -1 배 시킨다

- transform.localScale = new Vector3(1 or -1, 1, 1);

 

 

'공부' 카테고리의 다른 글

unity07 다양한 환경의 기기에서 동작 일관화 시키기  (0) 2026.02.10
unity06 반복되는 오브젝트 / 애니메이션 만들기  (0) 2026.02.10
unity04 게임 UI 만들기  (0) 2026.02.09
unity03 게임 설계하기  (0) 2026.02.09
unity02 2d 게임 제작해보기  (0) 2026.02.08
'공부' 카테고리의 다른 글
  • unity07 다양한 환경의 기기에서 동작 일관화 시키기
  • unity06 반복되는 오브젝트 / 애니메이션 만들기
  • unity04 게임 UI 만들기
  • unity03 게임 설계하기
c_jm
c_jm
  • c_jm
    c_jm
    c_jm

    🎋 어제보다 발전한 오늘

  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • 프로젝트 (7)
      • 백준 문제풀이 (19)
      • 프로그래머스 문제풀이 (4)
      • 공부 (12)
      • 문제 해결 (2)
      • 기타 (5)
      • 궁금궁금 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준 #1152 #c++
    html
    docker-compose
    리버스 프록시 서버
    도커
    jquery
    다크모드
    홈서버
    도커컴포즈
    nginx
    티스토리 다크모드
    docker
    글자색
    코드블럭
    리버스 프록시
    docker-compose.yml
    reverse proxy
    인라인 css
    복붙
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
c_jm
unity05 중력/충돌
상단으로

티스토리툴바