TIL
📝 Rigidbody
📝 물체 속도 설정해서 움직이기
📝 물체에 힘을 가해서 움직이기
📝 버튼 입력으로 움직이기
📝 회전력을 주어 움직이기
👩💻 RigidBody
물리효과를 받기 위한 컴포넌트
RigidBody를 가지게 되면 중력의 영향을 받습니다
🔎 RigidBody를 이용하여 오브젝트를 움직이는 여러 방법을 살펴보겠습니다
🔻 Rigidbody component를 Ball 에 추가한 후, Rigidbody를 변수로 가져오기 위해서 스크립트를 새로 만들어 추가합니다
가운데 있는 줄무늬 공이 오늘의 메인 오브젝트 입니다
Ball Script
👩💻 코드 흐름은 선언 -> 초기화 -> 호출
📍 선언
Rigidbody rigid;
변수명 rigid 인 Rigidbody component 선언
📍 초기화
void Start()
{
rigid = GetComponent<Rigidbody>();
}
GetComponent<T> : 자신의 T타입 컴포넌트를 가져오는 메서드
rigid는 Rigidbody 컴포넌트를 가져왔습니다
📍 호출
Rigidbody를 이용하여 오브젝트를 움직이는 방법은 여러가지 입니다
속도올리기, 물체에 힘을 가해서 움직이기, 회전력으로 움직이기 등 하나씩 실행해보겠습니다
👩💻 속도 올리기
📌 velocity
rigidbody의 속도를 나타냅니다 , Vector 계열 , 일정 속도 유지
🔻 velocity | 오른쪽 방향으로 움직이는 로직
Vector3.right 는 좌표 (1, 0, 0)과 같습니다
.
.
.
🔻 velocity | 설정한 Vector3 좌표로 움직이는 로직
void Start에서는 해당 좌표까지 도달하고 중력에 의해 호선을 그리며 튕겨져 나갑니다
.
.
.
🔻 velocity | Vector3 좌표로 움직이는 로직을 FixedUpdate에서 실행시켰을 때
.
.
.
1초에 60번 반복되기 때문에 계속해서 뻗어나가는 모습을 볼 수 있습니다
📣 Rigidbody를 다루는 경우, Update가 아닌 FixedUpdate를 사용해야합니다
Update는 프레임 속도에 영향을 받기 때문에 불안정하며, 과도한 Update 호출보다 규칙적이고 표준화된 FixedUpdate가 적합합니다
👩💻 물체에 힘을 가해서 움직이기
📌 AddForce(Vec)
rigidbody에 힘을 가해 가속도를 줍니다. 오브젝트의 질량에 따라 가속도가 달라집니다
rigidbody.AddForce(Vector3 * force, ForceMode.mode);
📌 ForceMode.
힘을 주는 방식 (가속, 무게 반영)
- 연속적인 힘
가속 추가, 굴러가고 있는 중에 사용
.Force : 무게 적용
.Acceleration : 무게 무시
- 순간적인 힘
순간적인 속도를 붙여주는 방식, 정지상태에서 이동할 때
.Impulse : 무게 적용
.VelocityChange : 무게 무시
FoceMode.Impulse 를 가장 많이 사용합니다
🔻 AddForce | 캐릭터 점프할 때 많이 쓰는 로직
.
.
오브젝트의 질량에 따라 힘의 크기도 달라집니다
Mass 무게 값이 클수록 움직이는데 더 많은 힘이 필요합니다
🔻 AddForce | 캐릭터 제자리 연속 점프
AddForce로 인해 버튼을 계속 누르면 연속적으로 점프를 빠르게 하여 높이 올라갑니다
Input Jump는 스페이스바를 누르면 로직을 실행합니다
.
.
🔻 스페이스 바로 연속 제자리 점프 & 상하좌우 방향키를 이용하여 힘을 가해 공 움직이기
.
.
각 방향키마다 0.2f의 힘을 주어 가속도를 붙여줄 수 있습니다
5개의 공의 Mass가 모두 동일하기 때문에 줄무늬 공의 힘에 의해 밀려납니다
📣 AddForce의 힘 방향으로 계속 속도 velocity가 증가합니다
📣 Rigidbody를 사용한 이동은 Transform보다 자연스럽습니다
👩💻 회전력을 주어 움직이기
📌 AddTorque (Vec)
Vec 방향을 축으로 회전력이 생깁니다
Rigidbody.AddTorque(Vector torque);
🔻 back 좌표 (0, 0, -1) 를 회전축으로 하여 회전하는 로직입니다
📣 Vec를 축으로 삼기 때문에 이동방향에 주의해야 합니다
.
.
'유니티' 카테고리의 다른 글
유니티 게임 인터페이스 UI 기초 / Canvas / Text / Image / Button (0) | 2022.04.13 |
---|---|
유니티 물리 충돌 이벤트 / OnCollision-- / OnTrigger-- (0) | 2022.04.12 |
유니티 오브젝트 중력과 충돌 / Material / Collider / RigidBody 기초 (0) | 2022.04.11 |
유니티 목표지점으로 이동하기 - (Vector3) MoveTowards / SmoothDamp / Lerp / Slerp (0) | 2022.04.09 |
유니티 오브젝트 움직이기 - Input / GetKey / GetButton / Vector3 / GetAxis (0) | 2022.04.09 |