유니티 ScriptableObject를 활용한 오브젝트 생성

2020. 11. 9. 23:32유니티실습

반응형
728x170

안녕하세요 유니티 비기너입니다.

이번 시간에는 ScriptableObject를 활용하여 오브젝트를 생성해보겠습니다.

ScriptableObject란

ScriptableObject는 대량의 데이터를 저장하는 데 사용이 가능한 데이터 컨테이너로

ScriptableObject를 사용하게 되면 사본의 생성을 방지하여 메모리의 사용을 줄일 수 있습니다.

즉 중복되는 데이터를 만들어낼 때 메모리가 점점 쌓여가는 단점을 방지하기 위해 사용됩니다.

참고 사이트 

learn.unity.com/tutorial/introduction-to-scriptable-objects#

결과 화면 

ScriptableObject를 활용하여 오브젝트를 생성하고 UI버튼을 이용하여 생성시킬 아이템을 전환시키는 화면입니다. 

ItemScriptableObject 스크립트

[CreateAssetMenu()]
public class ItemScriptableObject : ScriptableObject{
    public Transform myPrefab;
}

 

MonoBehaviour를 지우고 ScripableObject 입력합니다.

CreateAssetMenu Attribute를 입력하여 Asset 파일로 프로젝트에 저장할 수 있도록 진행합니다.

 

Asset > Create로 들어가 보시면 방금 작성하였던 ScriptableObject를 생성할 수 있습니다.

스프라이트를 포함하는 임의의 오브젝트 프리팹 3가지를 준비하고

생성한 ItemScriptableObject 안의 Transform값에 각각 할당합니다.

GameManager 스크립트

public class GameManager : MonoBehaviour
{
    [SerializeField]
    private ItemScriptableObject itemType; 

    void Update() {

        if (Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject()) {
            Vector3 vpos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            vpos.z = 0f;
            Instantiate(itemType.myPrefab, vpos, Quaternion.identity);
        }
    }

    public void SetItemType(ItemScriptableObject item) {
        itemType = item;
    }    
}

마우스 버튼 클릭 시 ScriptableObject에 할당되어있는 프리팹을 생성하며 눌려진 UI버튼에 따라 

할당된 ScriptableObject를 변경합니다.

 

위의 방식 이외에도 많은 부분에 응용해서 사용이 가능하고 기본적으로는 중복되는 데이터를

다룰 때 해당 기능을 활용하여 메모리를 효율적으로 사용하시길 바라겠습니다.

 

ScriptableObject를 활용하는 기본적인 방법에 대해 알아보았습니다.

다음에는 더 좋은 주제로 찾아뵙겠습니다.

감사합니다.

반응형
그리드형