본문 바로가기
유니티 개발일지

유니티 캐릭터 점프 구현 Rigidbody / AddForce / ForceMode.Impulse

by 곰스타일 2023. 4. 28.
728x90
반응형
SMALL
캐릭터가 점프하는 코드

캐릭터가 점프하는 코드

다음과 같이 작성할 수 있습니다.

using UnityEngine;
using UnityEngine.UI;

public class JumpOnButtonClick : MonoBehaviour
{
    public float jumpForce = 5.0f; //점프 강도
    public Rigidbody characterRigidbody;

    void Start()
    {
        Button button = GetComponent<Button>();
        button.onClick.AddListener(Jump);
    }

    void Jump()
    {
        characterRigidbody.AddForce(Vector3.up * jumpForce, ForceMode.Impulse); //벡터y값을 점프강도 만큼 UP
    }
}

이 코드는 "JumpOnButtonClick" 클래스를 생성하여, 해당 클래스에서 "Button" 컴포넌트를 가져와서 클릭 이벤트에 대한 리스너를 등록합니다. "Button" 컴포넌트는 UI 요소에 클릭 이벤트를 추가할 수 있는 컴포넌트입니다.

클릭 이벤트가 발생하면 "Jump" 함수가 호출되고, 해당 함수에서 캐릭터의 Rigidbody 컴포넌트에 위쪽 방향으로 일정한 힘을 가해서 점프하는 동작을 구현합니다.

* 이 코드를 적용하기 위해서는, 캐릭터의 Rigidbody 컴포넌트와 "JumpOnButtonClick" 스크립트가 모두 적용된 게임 오브젝트를 생성한 뒤, UI 요소(Button)의 Inspector 창에서 "On Click()" 이벤트에 "JumpOnButtonClick" 스크립트의 함수를 연결해주면 됩니다.

* 즉 캐릭터 오브젝트에 Rigidbody 컴포넌트 설정하고 위 스크립트 컴포넌트를 추가 해야함

* 또 버튼 UI에 On Click()이벤트에 캐릭터 오브젝트를 끌어 당겨 위  스크립트의 Jump()함수를 호출하도록 설정해야함

 

ForceMode.Impulse

ForceMode.Impulse는 리지드바디(Rigidbody)에 힘을 가할 때 사용되는 옵션 중 하나로

순간적인 강한 힘을 가하는 옵션입니다. 즉, 한 번의 힘을 가하면 그대로 멈출 때까지 계속해서 가속됩니다.

예를 들어, 공이 땅에 닿아 튀어오르는 동작에서는 ForceMode.Impulse를 사용하여 공에 순간적인 힘을 가해줍니다.

이 경우에는 공의 질량이 클 경우 더 많은 힘을 가해야합니다.

리지드바디에 적용되는 힘의 종류는 다음과 같습니다.

  • Force: 지속적인 힘을 가하는 옵션입니다. 계속해서 힘이 가해지면서 물체를 가속합니다.
  • Acceleration: 시간에 따른 가속도를 설정하여 힘을 가하는 옵션입니다. 시간이 지남에 따라 가속도가 증가합니다.
  • Impulse: 순간적인 강한 힘을 가하는 옵션입니다. 한 번의 힘을 가하면 그대로 멈출 때까지 계속해서 가속됩니다.
  • VelocityChange: 순간적인 강한 속도를 가하는 옵션입니다. 속도를 바로 변경하면서 물체를 이동시킵니다.

 

728x90
반응형
LIST

댓글