ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1112)
    • 개인 프로젝트 (1)
      • Unity (1)
      • Unreal (0)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (190)
      • Unreal (69)
      • Unity (110)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (242)
      • 공통 (21)
      • 네트워크 (45)
      • OS & 하드웨어 (60)
      • 자료구조 & 알고리즘 (99)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (377)
      • C++ (168)
      • C# (97)
      • Java (11)
      • Python (36)
      • SQL (44)
      • JavaScript (9)
      • React (7)
    • 그 외 (15)
      • Math (7)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • C
  • Unity
  • 파이썬
  • 문자열
  • 포인터
  • 그래픽스
  • 함수
  • 오블완
  • 배열
  • C++
  • 백준
  • 유니티
  • 클래스
  • python
  • SQL
  • 알고리즘
  • string
  • 언리얼
  • 티스토리챌린지
  • c#

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

[Unity] 강체 관련 Rigidbody / AddForce / AddTorque
게임엔진/Unity

[Unity] 강체 관련 Rigidbody / AddForce / AddTorque

2023. 6. 27. 15:09

Rigidbody

Rigidbody(강체)는 gameObject가 유니티 물리 엔진에 제어 받게 한다. 한마디로 힘과 질량을 갖고 움직일 수 있도록 하는 것이다.

Mass : 오브젝트의 질량
Drag : 오브젝트가 받는 공기 저항 값
Angular Drag : 오브젝트가 토크로 회전 시 받는 공기 저항 값
Use Gravity : 중력의 영향 유무
Is Kinematic : 활성화 시 물리엔진의 제어없이 Transform으로만 조작됨
Interpolate : 오브젝트의 움직임 부드러움 옵션 처리
Collision Dectection : 오브젝트 충돌 감지 / 감지 옵션 처리
Constraints : 오브젝트의 움직임 고정
위는 대표적인 rigidbody의 프로퍼티이다.
Unity Documentation에서는 힘의 사용 여부에 따른 Transform과 RigidBody 조작 차이가 크므로 한 오브젝트에서 Transform과 RigidBody 둘 중 하나만을 조작하기를 권한다.

AddForce()

Rigidbody의 가장 대표적인 메소드인 AddForce이다. 인자로 Vector3을 주고 힘을 곱하는 것으로 오브젝트의 rigidbody에 힘을 추가한다.

rb = GetComponent<Rigidbody>();
rb.AddForce(new Vector3(0, 1, 0)*100);
힘을 주어 오브젝트가 해당 방향으로 날아가게 만든다. 처음에는 이것으로 캐릭터가 점프하도록 만들었으나, 문제가 생길 것이다.
캐릭터가 똑바로 서 있는 상황에서는 위처럼 y축으로 힘을 가하는 것이 맞다. 하지만 이 방향은 global 좌표 기준이기 때문에 캐릭터의 방향과 상관없이 y축으로 움직이게 만든다. 예를 들어 캐릭터가 옆으로 누워있는 상황에서는 의도와 맞지 않게 옆으로 하늘을 향해 껑충 뛰게 되는 것이다.

캐릭터가 항상 머리 방향으로, 즉 local 좌표로 힘을 가하고 싶다면 AddRelativeForce()를 사용하면 된다.

rb.AddRelativeForce(new Vector3(0, 1, 0)*100);

이번에는 캐릭터가 누워있는 상황이라면 역시 부자연스럽지만 머리쪽으로 캐릭터가 움직이는 것을 확인 할 수 있을 것이다.

AddTorque()

AddForce와 마찬가지로 AddTorque는 Rigidbody에 토크를 추가한다. 역시 인자로 Vector3을 받아 해당 방향을 축으로 회전한다.

rb = GetComponent<Rigidbody>();
rb.AddTorque(new Vector3(0, 1, 0) * 100);

addForce와 같이 global 기준이고, 역시 마찬가지로 AddRelativeTorque를 이용하여 local 좌표를 축으로 회전 시킬 수 있다.

rb.AddRelativeTorque(new Vector3(0, 1, 0) * 100);

출처 : https://www.blog.ecsimsw.com/entry/Rigidbody-AddForce-AddTorque

저작자표시 (새창열림)

'게임엔진 > Unity' 카테고리의 다른 글

[Unity] (Rule Tile)룰 타일로 타일맵 자동 연결하기  (0) 2023.07.21
[Unity] 이벤트 함수는 어떻게 실행되는 것일까?  (0) 2023.07.15
[Unity] 트랜스폼(Transform) 이동(Move)  (0) 2023.06.27
[Unity] 오브젝트의 활성화 상태 확인  (0) 2023.06.01
[Unity] RectTransform 내 피벗 Top과 Bottom 설정  (0) 2023.05.31
    '게임엔진/Unity' 카테고리의 다른 글
    • [Unity] (Rule Tile)룰 타일로 타일맵 자동 연결하기
    • [Unity] 이벤트 함수는 어떻게 실행되는 것일까?
    • [Unity] 트랜스폼(Transform) 이동(Move)
    • [Unity] 오브젝트의 활성화 상태 확인
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바