이번에는 유니티 씬(Scene) 안에, 일정 시간마다 반복적으로 위로 점프하는 큐브 오브젝트(Cube Object)를 만들어보겠습니다.

이때 큐브의 점프 높이(Jump Height)를 모노비헤이비어 코드에서 직접 수정하는 방식이 아니라, 점프 높이 데이터를 담고 있는 스크립터블 오브젝트(ScriptableObject) 에셋을 교체하는 것만으로 점프 동작이 실시간으로 달라지도록 만들어 보겠습니다.

점프 데이터 에셋 생성

이를 위해 먼저 새로운 스크립터블 오브젝트를 하나 생성합니다. 그리고 이름을 JumpData로 변경하겠습니다.

image.png

점프 데이터를 위한 변수 선언

이제 JumpData 스크립트를 열고, 점프 파워를 저장하기 위한 변수를 다음과 같이 선언하겠습니다. 이때 기본값은 5로 설정합니다.

using UnityEngine;

[CreateAssetMenu(fileName = "JumpData", menuName = "Scriptable Objects/JumpData")]
public class JumpData : ScriptableObject
{
    public float jumpPower = 5f;
}

큐브 제자리 점프용 모노비헤이비어(MonoBehaviour) 스크립트 생성

다음으로는 유니티 씬(Scene) 안에 있는 큐브(Cube) 오브젝트에 부착할, 제자리 점프 동작을 구현하는 로직이 포함된 새로운 모노비헤이비어(MonoBehaviour) 스크립트를 만들어야 합니다.

이를 위해 유니티 상단의 Assets > Create > MonoBehaviour Script 메뉴를 이용하여 새 모노비헤이비어 스크립트를 생성하겠습니다. 그리고 나서 스크립트 이름을 CubeJumper로 변경하겠습니다.

image.png

이제 CubeJumper 스크립트 파일을 열겠습니다. 기본으로 생성된 코드 중에서는 Start() 함수만 남기고, Update() 함수는 삭제하겠습니다. 이 예제에서는 프레임마다 처리해야 할 로직이 없기 때문에 Update() 함수는 필요하지 않습니다.

using UnityEngine;

public class CubeJumper : MonoBehaviour
{
    void Start()
    {
        
    }
}

그리고 나서, 다음과 같이 두 개의 변수를 선언하겠습니다.

using UnityEngine;

public class CubeJumper : MonoBehaviour
{
    public JumpData jumpData;
    private Rigidbody rb;

    void Start()
    {
        
    }
}

첫 번째 변수는 JumpData 스크립터블 오브젝트를 참조하기 위한 퍼블릭 변수입니다.

두 번째 변수(rb)는 물리 연산을 적용하기 위해 필요한 리지드바디(Rigidbody) 컴포넌트를 저장할 변수입니다. 이 변수는 나중에 GetComponent<Rigidbody>()를 통해 컴포넌트를 가져와 캐싱(caching: 한 번 가져온 컴포넌트를 변수에 저장해서 재사용)하기 위한 용도로 사용될 것입니다.

리지드바디(Rigidbody) 컴포넌트 캐싱 및 예외 처리

이제 Start() 함수 내부에서 이 게임 오브젝트에 붙어 있는 리지드바디(Rigidbody) 컴포넌트를 가져와 변수에 저장하겠습니다.