유니티:힘으로 오브젝트 이동
- 유니티:개요
- 유니티:기본 조작
- 유니티:카메라
- 유니티:오브젝트
- 유니티:코딩기초
- 유니티:UI
- 유니티:게임 내 화면
- 유니티:플레이어
- 유니티:맵
- 유니티:씬
- 유니티:몬스터
- 유니티:아이템
- 유니티:음향
- 유니티:빌드
- 유니티:VR
- 유니티:팁
개요
플레이어가 직접 조작할 수도 있지만, 외부의 힘으로 인해 물체가 이동하기도 한다. 자연스러운 물리적 움직임을 만들기 위해 힘에 반응하게끔 만들어보자.
입력에 따라 물체가 특정방향성의 속도를 갖게 할 수도 있지만, 물체와의 상호작용을 위해 힘이 발생하게 하는 편이 자연스럽다.
RigidBody에 집중한다.
스크립트를 만든 후 RigidBody 컴포넌트를 변수화 하여 사용해야 한다.
public class 함수명:MonoBehaviour {
Rigidbody 변수명;
void Start(){
변수=GetComponent<Rigidbody>(); //변수 초기화함. 컴포넌트를 가져온다는 의미.
변수.velocity=new Vector3(1, 2, 3); //초기 속력을 정의할 수 있다.
......}
GetComponent<> //이건 자신 내부의 컴포넌트를 가져온다는 의미이다. 꺽쇠 안에 그 컴포넌트를 넣는다.
tip
물리현상 관련 명령은 FixedUpdate() 내에 사용하는 것이 권장된다.
힘 가하기
public class 함수명:MonoBehaviour {
Rigidbody 변수명;
void Start(){
변수=GetComponent<Rigidbody>(); //변수 초기화함.
변수.AddForce(벡터)
변수.AddForce(벡터, 옵션)
무게가 클 수록 더 큰 힘을 가해주어야 움직인다.
옵션 | 설명 | ||
---|---|---|---|
ForceMode.Impulse | 점프할 때, 이동할 때 다양하게 사용. | ||
이동할 때 힘이 자연스레 발생하게끔.
변수=GetComponent<Rigidbody>(); //변수 초기화함.
변수.AddForce(벡터)
void FixedUpdate() {
if(Input.GetButtonDown("조작") (
Vector3 vec = new Vector3(Input.GetAxisRaw("Horizontal"),
0,
Input.GetAxisRaw("Horizontal")) //키를 누르는 길이에 따라 달리 작용하게.
변수.AddForce(vec, 옵션)
회전에 대한 고려(토크)
변수.AddTorque(벡터, 옵션?); //옵션이 있을까?
축에 따른 회전을 만들어낸다.(물리적인 회전과 반대방향이다. ex) y축에 대해 회전한다는 명령은 물리에서 -y의 회전을 만들어낸다.)