1. GameObject.Find(string name)


GameObject shop = GameObject.Find("Shop");


이렇게하면, Shop이라는 이름을 갖은 게임오브젝트를 찾은 뒤 그 값을 리턴한다.


가장 처음에 나오는 게임오브젝트를 찾아서 반환한다.


이후에는 shop 변수를 통해 게임오브젝트를 조작할 수 있다.


예를 들어 시작했을때, 이 게임오브젝트를 안 보이게... 비활성화시키고 싶다면,


shop.SetActive(false);


를 Start함수에 입력해주면 된다.


또한,


shop.activeSelf을 통해 현재 Object가 어떤 상태인지 확인해볼 수 있다.



bool temp = (shop.activeSelf == true) ? false : true;


이렇게하면, shop.activeSelf를 if 조건문에 넣어


true라면 false로, false라면 true로 토글(Toggle)할 수 있게 된다.



2. GameObject FindGameObjectsWithTag(string tagname)


var t = GameObject.FindGameObjectsWithTag("Player");


이렇게 작성하게 되면, 유니티에서 Player이라고 Tag를 설정한 게임오브젝트들의 리스트를 반환한다.


만약, 발견되지 않으면 null값을 반환한다.


리스트이므로, for문이나 foreach문을 사용하여 처리한다.

s

3. GameObject.FindGameObjectWithTag()


var t = GameObject.FindGameObjectWithTag("Player");


이렇게 하면, Player라는 태그를 갖는 게임오브젝트를 불러온다.


위에 GameObject.FindGameObjectsWithTag("태그명")과 헷갈린다. 뭐가 다른지 한참을 처다봤다.


s 차이다. 복수로 리스트 형태로 가져오느냐, 달랑 하나만 가져오느냐 차이이다.


태그를 여러개 사용시에는 2번을 사용해 리스트로 사용하고, 태그가 하나라면 3번을 사용한다.



4. transform.Find(string name)


Text titleTxt = transform.Find("Title").GetComponent<Text>();


이렇게 하면, Find와 마찮가지로 찾지만, 자식이나 부모 관계에서만 찾는다.


즉, 해당 게임오브젝트의 자식 관계에 있는 Title이라는 게임오브젝트를 찾고 


그 Title에 붙어있는 컴포넌트들 중 Text를 가져온뒤 titleTxt에 저장하는 코드이다.


반면, GameObject.Find("오브젝트명"); 으로 작성할 경우에는 Hierarchy안에서 위에서부터 다 찾는다.





Posted by sungho88
,

[같은 게임오브젝트(GameObject)에서 컴포넌트(Component) 호출하기]

 

동일한 게임오브젝트가 갖고 있는 특정 다른 컴포넌트에 접근해야 할 경우 사용하는 방법은 다음과 같다.

이러한 선언은 Start()함수에서 또는 Awake()함수에서 미리 할당해놓아야 한다.

 

void Start() {

Transform tr = GetComponent<Transform>();

Transform tr = gameObject.GetComponent<Transform>();

Transform tr = (Transform)GetComponent("Transform");

Transform tr = (Transform)GetComponent(typeof(Transform));

}

 

이 스크립트가 포함된 게임오브젝트가 갖고 있는 컴포넌트 중에서 Transform 컴포넌트를 추출하여 tr 변수에 저장해라

 

 

[다른 게임오브젝트(GameObject)에 있는 컴포넌트(Component) 호출하기]

 

오브젝트들은 서로 독립적으로 작동하기때문에, 

위와같이 GetComponent만으로는 다은 오브젝트에 컴포넌트는 호출할 수 없다. 

이럴때는, 스크립트에 

 

public GameObject other;

 

와 같이 위에 선언해주고,

 

tr = other.GetComponent<Transform>();

 

이렇게하면, other의 게임오브젝트에 붙어있는 컴포넌트를 tr에 저장하여 사용할 수 있게된다.

 

아, 게임오브젝트는 유니티 에디터로 돌아와서, other가 어떤 게임오브젝트인지를 알려주어야한다.

즉, 이 스크립트가 붙어있는 게임오브젝트로 가면 Inspector에 스크립트 하단에 other가 보이고, 그 옆에 값은  None.

이 부분에다가 참조하고 싶은 게임오브젝트를 드래그 앤 드롭으로 옮겨주면 None대신 게임오브젝트가 들어간다.

이것이 연결된 것이라고 할 수 있다.

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

또는 Tag를 이용한 방법도 있다.

 

Button button = GameObject.FindGameObjectWithTag("게임오브젝트이름").GetComponent<Button>();

 

이렇게하면, 게임오브젝트에 태그를 검색해서, 찾아온 뒤, Button 컴포넌트를 가져오게 된다.

 

https://www.10000duck.com/ducks/37

 

10000duck - 그레타 툰베리가 우리 도서관에 ?!

온라인 모금함을 통해 기부하세요.

www.10000duck.com

 

Posted by sungho88
,

using UnityEngine;
using System.Collections;

public class Variables : MonoBehaviour {

    public string SIGNUP =  "등록";
    public string LOGIN = "로그인";
    public string LOGIN_FACEBOOK = "Facebook Login~~";

    // Use this for initialization
    void Start () {
 
    }
    
    // Update is called once per frame
    void Update () {
    
    }
}


여기 이런 스크립트가 있다. 

다른 스크립트에서 이 스크립트에 선언된 변수를 선언하는 방법은 무엇일까.

가장 먼저, 위 스크립트를 (빈) 게임오브젝트에 집어넣어 컴포넌트화 시켜놓고, GetComponent를 사용하는 방법이다.


Variables vari = GameObject.Find("Variables 컴포넌트가 부착된 오브젝트").GetComponent<Variables>();


또는 나눠서,


GameObject gameObject = GameObject.Find("Variables 컴포넌트가 부착된 오브젝트");

Variables vari = gameObject.GetComponent<Variables>();


으로 작성한다.


//////////////////


하지만, 왜 반드시 GameObject를 선언해줘야하는것인가?

그냥 변수를 가져와서 쓸 수 있는 방법은 없는걸까?

검색결과, 싱글톤 방식으로 변경을 하면 가능하다는 것을 알게 되었다.



Posted by sungho88
,