24.02.03 TIL - Unity : AddForce(), 물리적 힘 가하기 + ForceMode

JJwoo·2024년 2월 3일

AddForce()

물리 작용을 이용해 힘을 발생시키는 메서드.

Rigidbody 컴포넌트의 메소드이며

(Rigidbody가 없으면 작동 x)

점프, 물체 밀기 또는 폭발 생성과 같은 물리적 동작 등에 사용 됨.

  • 힘의 적용 : Rigidbody를 가진 객체 등

  • 첫 번째 인수 : Vector ( 힘을 가할 방향과 크기 ) ---> new Vector3(0, 1, 0) = Vector3.up 으로 편하게 나타 낼 수 있음.

  • 두 번째 인수 : ForceMode ( 힘의 방식 )

ForceMode 열거형(enum) 설명

ForceMode설명
.Force무게를 적용하고, 연속적인 힘을 가함
.Impulse무게를 적용하고, 순간적인 힘을 가함
.Acceleration무게를 적용하지 않고, 연속적인 힘을 가함
.VelocityChange무게를 적용하지 않고, 순간적인 힘을 가함

연속적인 힘 -> 점진적인 속도 증가 = ex. 자동차 엑셀
순간적인 힘 -> 점프, 폭발 등 순간적으로 속도를 낼 때.

추가 설명
ForceMode.Force -> 물체 질량을 고려한 표준적인 힘
ForceMode.Acceleration -> 질량 고려 x, Force 보다 빠르다.
ForceMode.Impulse: 순간적인 힘, 질량을 고려함, ex) 폭발
ForceMode.VelocityChange -> 객체의 속도를 즉시 변경하고 싶을 때

점프구현 예시

    public float jumppower; // 점프 힘

    Rigidbody rb; // 플레이어의 리지드 바디 컴포넌트
   

    // Start is called before the first frame update
    void Start()
    {
        // 플레이어의 리지드 바디 컴포넌트 가져와서 저장
        rb = GetComponent<Rigidbody>(); 

    }
    
    void Update()
    {
    if (Input.GetKeyDown(KeyCode.Space))  // Space 키를 누르면
    {
    	// 위로 힘 발생
    	rb.AddForce(Vector3.up * jumpPower, ForceMode.Impulse);
    }
    }
    
    ! 점프 횟수 제한 안해주면 누르고 있는 동안 대기권을 돌파하기 때문에 jumpcount를 만들고 조건문을 통해 횟수 제한 해주어야 함.
    
    
    
profile
개발 모코코

0개의 댓글