안녕하세요 유니티 비기너입니다.
이번 시간에는 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를 활용하는 기본적인 방법에 대해 알아보았습니다.
다음에는 더 좋은 주제로 찾아뵙겠습니다.
감사합니다.
'유니티실습' 카테고리의 다른 글
유니티 IsPointerOverGameObject 활용한 겹치는 오브젝트 구별법 (0) | 2020.11.25 |
---|---|
유니티 객체 합치기 Merge (0) | 2020.11.23 |
유니티 에셋스토어 퍼블리셔 로그인 위치 찾기 (0) | 2020.11.07 |
유니티 2D 그림자 표현해보기 (0) | 2020.11.05 |
유니티 Invoke를 활용한 시간 지연 (0) | 2020.11.03 |