ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] 5주차 2일 Prefab, Instantiate, Enum
    개발일지/스파르타 코딩클럽 부트캠프 2024. 5. 14. 20:47

     

    오늘 배운 내용


    프리팹 (Prefab)

     

    어 프리팹 개념은 예전부터 알고 있었지만 정확한 개념과 장점 등을 복습했다.

    • 프리팹은 Unity 게임 엔진에서 사용되는 게임 오브젝트를 재사용 가능하고 관리하기 쉽게 만들기 위한 템플릿, 프리셋
    • 프리팹을 사용하면 게임 오브젝트와 그에 관련된 컴포넌트 및 설정을 미리 정의하고, 여러 장면이나 게임에서 재사용할 수 있다
    • 프리팹은 인스턴스화를 통해 실제 게임 오브젝트로 변환될 수 있고, 이 때 모든 프로퍼티와 컴포넌트 설정이 복사된다.
    • 프리팹의 변경사항은 모든 인스턴스에 즉시 반영되므로, 일관성을 유지하고 일괄적인 업데이트를 쉽게 할 수 있다.
    • 프리팹은 레벨 디자인, 재사용 가능한 게임 요소(캐릭터, 아이템 등)의 생성, 프로토타이핑 등에 주로 사용된다.

    여러가지가 있지만 아마 프리팹의 가장 큰 장점은 재사용이 아닐까 싶다.

    예를들어서 내가 스퀘어 오브젝트를 100개 만들어놨는데 갑자기 색깔 바꾸라고하면 조졌다. 하는게 아니라

    그냥 색 바꾼 프리팹 하나 만들어서 복사만 하면 되니까 얼마나 편리하지?

    게임오브젝트를 에셋으로 만든다고 생각하면 될 거 같다.

     

    Instantiate

     

    Instantiate 함수는 Unity에서 제공하는 메소드인데 말 그대로 주어진 원본 개체의 복사본을 생성하고 반환하는

    역할을 한다. 알고는 있었지만 사용하기 어려운 메소드라고 개인적으로 생각한다. 아직은

    • 이 함수는 주로 게임 오브젝트, 즉 캐릭터, 아이템, 프로젝타일 등을 동적으로 게임 세계에 추가할 때 사용된다.
    • Instantiate 함수는 원본 개체의 모든 컴포넌트와 그 프로퍼티를 복사하여 새 게임 오브젝트를 생성한다.
    • 이 함수를 통해 생성된 게임 오브젝트는 독립적이며, 원본 개체에 대한 변화는 이에 영향을 주지 않는다.
    • Instantiate 함수는 원본 게임 오브젝트, 위치 및 회전 정보를 인자로 받을 수 있다.

    기본적인 Instantiate 함수의 형식은 다음과 같다.

    public static Object Instantiate(Object original, Transform parent = null, bool instantiateInWorldSpace = false);

    여기서

    original : 생성할 오브젝트의 원본

    parent : 생성된 오브젝트의 부모 Transform인데, 지정안하면 생성된 오브젝트는 부모없이 생성된다.

    instantiateInWorldSpace(bool, optional) : 생성된 오브젝트의 위치를 월드 공간 또는 부모의 로컬 공간으로 할지 결정한다.

     

    이번에 화살을 복사한 코드는 다음과 같다.

    Instantiate(TestPrefab, projectileSpawnPosition.position, Quaternion.identity);

    TestPrefab이 복사할 원본이고, projectileSpawnposition.position에 생성한다. 

    Quaternion.identity는 '회전 없음' 이다. 즉, 개체가 표준 축 또는 상위 축과 완벽히 정렬된다는 뜻이다.

     

    Enum

     

    Enum 열거형은 숫자에 의미부여를 한다고 생각하면 편하다.

    기본 타입은 int를 기반으로, 제일 앞의 값을 0으로 하고 이후 1, 2, 3 .. 번호를 붙인다.

    중간에 번호체계 변경도 가능하다. 직접 값을 지정해주면 된다.

    그럼 열거형을 대체 왜 쓰는지 궁금해 하는 사람들이 있을거다

    숫자에 의미부여를 왜하는데?

    만약 아이템이 무기, 방어구, 장신구 등등 여러 타입이 있고

    그에 따라서 코드를 작성한다고 쳐보자

    아래 예시를 보면 단번에 이해할 수 있다.

     

    if(ItemType == 0)        if(ItemType == ItemType.Weapon)

     

    ItemType이 0이라고 하면 내가 나중에 볼때도 다른 사람이 볼때도 대체 없다는건지 뭐라는건지 모를것이다.

     

Designed by Tistory.