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>();
}
}
미리 만들어 놓은 게임오브젝트, 템플릿으로 프리팹 시스템을 이용하여 게임오브젝트를 생성, 설정 및 저장할 수 있다.
처음부터 씬에 존재하지 않던 게임오브젝트를 런타임 시점에 생성하려는 경우 사용한다.
<프리팹 생성>
유니티 하이어라키 창의 게임오브젝트를 프로젝트 창을 드래그 & 드롭하여 프리팹에셋을 생성
<프리팹 특징>
-게임오브젝트를 프리팹화 시킨 프리팹에셋은 게임오브젝트의 모든 컴포넌트, 속성값, 자식 게임오브젝트를 가지고 있다.
-프리팹에셋을 게임씬에 추가할 경우 프리팹인스턴스로 생성한다.
-프리팹에셋의 변경사항은 프리팹인스턴스에게 자동으로 반영한다.
-프리팹인스턴스에 변경사항이 있을 경우 해당 변경사항은 프리팹인스턴스에 영향을 받지 않는다
-프리팹에셋을 클래스, 프리팹인스턴스를 클래스의 인스턴스로 볼 수 있다.