본문 바로가기
Programming/Unity

[Unity] 12. 물리 영향을 받는 게임 오브젝트 이동

by 가가가가가가 2022. 7. 10.
반응형
  • 컴포넌트 가져오기
    - GetComponent<T> : 자신의 T타입 컴포넌트를 가져옴
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyBall : MonoBehaviour
{
    Rigidbody rigid;

    void Start()
    {
        rigid = GetComponent<Rigidbody>();
    }
}

 

  • 물체 속도 설정으로 이동
    - velocity : 현재 이동 속도
    - RigidBody 관련 코드는 FixedUpdate에 작성 (일반 Update 함수에 X)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyBall : MonoBehaviour
{
    Rigidbody rigid;

    void Start()
    {
        rigid = GetComponent<Rigidbody>();
    }
    
    void FixedUpdate()
    {
        rigid.velocity = Vector3.forward;
    }
}

 

  • 물체에 힘을 가해 이동
    - AddForce(Vec) : Vec의 방향과 크기로 힘을 줌
    - ForceMode : 힘을 주는 방식 (가속, 무게 반영)
    - Mass 무게 값이 클수록 움직이는데 더 많은 힘이 필요
    - AddForce의 힘 방향으로 계속 속도 velocity가 증가
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyBall : MonoBehaviour
{
    Rigidbody rigid;
    
    void Start()
    {
        rigid = GetComponent<Rigidbody>();
    }
    
    void FixedUpdate()
    {
        // Jump 버튼을 누를 경우 힘으로 이동
        if (Input.GetButtonDown("Jump"))
        {
            rigid.AddForce(Vector3.up * 10, ForceMode.Impulse);
        }
    }
    
}

 

  • 버튼 입력으로 이동
    - RigidBody를 사용한 이동은 transform을 사용하는 것보다 자연스러움
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyBall : MonoBehaviour
{
    Rigidbody rigid;

    void Start()
    {
        rigid = GetComponent<Rigidbody>();
    }
    
    void FixedUpdate()
    {
        Vector3 vec = new Vector3(Input.GetAxisRaw("Horizontal"), 
                                    0, 
                                    Input.GetAxisRaw("Vertical"));

        rigid.AddForce(vec, ForceMode.Impurse);
    }
    
}

 

  • 회전력 적용
    - AddTorque(Vec) : Vec 방향을 축으로 회전력이 생김
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyBall : MonoBehaviour
{
    Rigidbody rigid;

    void Start()
    {
        rigid = GetComponent<Rigidbody>();
    }
    
    
    void FixedUpdate()
    {
        //rigid.AddTorque(Vector3.back);
        //rigid.AddTorque(Vector3.up);
        rigid.AddTorque(Vector3.down);
    }
    
}

 


참고

반응형

댓글