유니티 기본함수(Function), 프리팹(Prefab)

simple_coding·2024년 2월 2일
0

기본함수(Function)

public class UnityFunction : MonoBehaviour
{
    [Header ("This")]
    public GameObject thisGameObject;
    public string thisName;
    public bool thisActive;
    public string thisTag;
    public int thisLayer;

    [Header("GameObject")]
    public GameObject newGameObject;
    public GameObject destroyGameObject;
    public GameObject findWithName;
    public GameObject findWithTag;

    [Header("Component")]
    public Component newComponent;
    public Component addComponent;
    public Component destroyComponent;
    public Component getComponent;
    public Component findComponent;
    
    private void Start()
    {
        ThisFunction();
        GameObjectFunction();
        ComponentFunction();
    }
    
    private void ThisFunction()
    {
        //<현재 게임오브젝트 참조>
        //컴포넌트가 붙어있는 게임오브젝트는 Component에 구현한 gameObject 속성을 이용하여 접근가능
        thisGameObject = gameObject; //컴포넌트가 붙어있는 게임오브젝트
        thisName = gameObject.name; //게임오브젝트의 이름
        thisActive = gameObject.activeSelf; //게임오브젝트의 활성화 여부(activeInHierarchy : 게임씬에서 활성화여부)
        thisTag = gameObject.tag; //게임오브젝트의 태그 string
        thisLayer = gameObject.layer; //게임오브젝트의 레이어 int
    }
    
    private void GameObjectFunction()
    {
        //<게임오브젝트 생성>
        newGameObject = new GameObject("NewGameObject");

        //<게임오브젝트 삭제>
        if(destroyGameObject != null)
        {
            Destroy(destroyGameObject, 3f);//(삭제할 오브젝트, 지연삭제 시간)
        }
        
        //<게임오브젝트 탐색>update에선 사용x
        findWithName = GameObject.Find("MainCamera"); //이름으로 찾기
        findWithTag = GameObject.FindWithTag("MainCamera"); //태그로 찾기, 이름으로 찾기보다 효율적
    }

    private void ComponentFunction()
    {
        //<컴포넌트 추가>
        // newComponent = new Rigidbody();//의미없음, 컴포넌트는 게임오브젝트에 부착되어 동작할 때 의미있음
        addComponent = gameObject.AddComponent<Rigidbody>();

        //<컴포넌트 삭제>
        if(destroyComponent != null) 
        {
            Destroy(destroyComponent);
        }

        //<컴포넌트 탐색 - 같은 게임오브젝트에서 찾기>
        getComponent = gameObject.GetComponent<Collider>();

        //<컴포넌트 탐색 - 씬에서 찾기>
        findComponent = Component.FindObjectOfType<Camera>();
    }
}

프리팹(Prefab)

미리 만들어 놓은 게임오브젝트, 템플릿으로 프리팹 시스템을 이용하여 게임오브젝트를 생성, 설정 및 저장할 수 있다.
처음부터 씬에 존재하지 않던 게임오브젝트를 런타임 시점에 생성하려는 경우 사용한다.

<프리팹 생성>
유니티 하이어라키 창의 게임오브젝트를 프로젝트 창을 드래그 & 드롭하여 프리팹에셋을 생성

<프리팹 특징>
-게임오브젝트를 프리팹화 시킨 프리팹에셋은 게임오브젝트의 모든 컴포넌트, 속성값, 자식 게임오브젝트를 가지고 있다.
-프리팹에셋을 게임씬에 추가할 경우 프리팹인스턴스로 생성한다.
-프리팹에셋의 변경사항은 프리팹인스턴스에게 자동으로 반영한다.
-프리팹인스턴스에 변경사항이 있을 경우 해당 변경사항은 프리팹인스턴스에 영향을 받지 않는다
-프리팹에셋을 클래스, 프리팹인스턴스를 클래스의 인스턴스로 볼 수 있다.

profile
기록하는 것이 기억된다.

0개의 댓글