유니티에서 버튼이나 이미지를 만들다보면 실수로 버튼을 생성하는 것이 아니라 GameObject를 생설하고 그 위에 버튼이나 이미지를 만드는 경우가 있다.
그러는 경우 Script에서 접근하고 작동하는 방식이나 유무자체도 크게 바뀐다.
애초에 script에서 선언할 때부터 다르다.
using UnityEngine;
GamoObject G_Btn;
using UnityEngine.UI;
Button Btn;
Image image;
버튼과 이미지는 생성할 때 부터 알수 있지만 UI의 기능 중 하나기 때문에 처음 UI에 대한 선언을 해야한다.
또한, 간단하게 이 오브젝트들을 껏다 킬때도 명령어가 다르다.
G_Btn.GameObject.SetActive(true);
Btn.GetComponent<Button>().interactable = true;
image.GetComponent<Image>().enabled = true;
단순히 게임 오브젝트 위에 만들고 SetActive를 끄고 켜는것은 무엇이 다를까?
다음 사진은 gameobject.setactive는 켜져있고 image.enabled는 꺼져있는 모습이다.
setactive는 그 오브젝트를 통째로 끔으로서 다른 접근이 불가능하지만,
이미지나 버튼의 기능이나 이미지만을 사용불가능하게 만든다면 다른 오브젝트나 스크립트가 다른 옵션들에게 접근이 가능한 것이다.
그렇게 생각하니 외운대로 쓰던 GetComponent의 문법이 보이기 시작했다.
Btn.GetComponent<Button>().interactable = true;
image.GetComponent<Image>().enabled = true;
선언한 타입의 오브젝트들(btn,image)에게서 원하는 component의 종류<button,image>를 찾아서 해당기능에 해당하는 값을 변경해준다.
그렇기에 GameObject와는 문법이 아예 다른 것이다.
G_Btn.GameObject.SetActive(true);
게임 오브젝트는 기본이 오브젝트 그 자체이기 때문이다.
GetComponet 함수를 조금 더 이해한 것 같다.
GameObject stagemanger; -변수 선언
stagemager = GameObject.Find("StageManger"); -변수에 원하는 오브젝트 선언
stagemanger.GetComponent<StageManger>().stage = 1; -스테이지 매니져라는 오브젝트에 있는 StageManger 컴포넌트(스크립트)에 접근, 변수 stage를 가져옴