오브젝트를 힘을줘서 움직이려면 Rigidbody 컴포넌트가 필요합니다.
스크립트에서 Rigid 컴포넌트를 가져옵니다. 항상 변수는 선언 -> 초기화 -> 호출 과정을 거치는게 좋습니다.
public class MyBall : MonoBehaviour
{
Rigidbody rigid; //선언
void Start()
{
rigid = GetComponent<Rigidbody>(); //초기화
//GetComponent는 자신의 T타입 컴포넌트를 가져온다. <>안에는 가져올 컴포넌트의 타입 적기
}
void FixedUpdate()
{
//호출 코드
}
}
소스 코드
rigid는 보통 물리와 연관된 코드기 때문에 FixedUpdate에 적는게 권장됩니다.
오브젝트 무게가 무거우면(Mass), addForce를 쓰더라도 무게에 비해 힘이 부족해 오브젝트가 움직이지 않을 수 있습니다.
ForceMode : 힘을 주는 방식 (가속, 무게 반영)
public class MyBall : MonoBehaviour
{
Rigidbody rigid;
void Start()
{
rigid = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
//1. 속력 바꾸기
rigid.velocity = new Vector3(1, 0, 0) * 2;
//2. 힘을 가하기
if (Input.GetButtonDown("Jump")) {
rigid.AddForce(Vector3.up * 10, ForceMode.Impulse); //ForceMode : 힘을 주는 방식 (가속, 무게 반영)
}
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
Vector3 vec = new Vector3(x, 0, y);
rigid.AddForce(vec, ForceMode.Impulse);
//3. 회전력
rigid.AddTorque(new Vector3(0, 1, 0) * 2);
}
}
작동 결과
velocity (속력)
AddForce (힘을 가하기)
AddTorque (회전력)
'유니티 3D기본(Roll A Ball)' 카테고리의 다른 글
12. 게임 인터페이스 만들기 (UGUI) (0) | 2021.10.22 |
---|---|
11. 물리 충돌 이벤트 (0) | 2021.10.16 |
9. 실체와 같은 물체 만들기 (5 컴포넌트) (0) | 2021.10.14 |
8. Time.deltaTime (델타타임) (0) | 2021.10.14 |
7. Vector3 이동함수를 이용한 오브젝트 이동 (0) | 2021.10.14 |