상세 컨텐츠

본문 제목

Unity Beginner ch. 02] 다른 오브젝트 활성화/비활성화/태그/레이어 제어

Unity Beginner

by allma 2020. 5. 4. 23:02

본문

basic에서 player의 gameObject에 대해서 알아봤습니다.

 

<복습>

1) 비활성화 gameObject.SetActive(false);
2) 활성화 gameObject.SetActive(true);
3) 활성화 상태보기 gameObject.activeSelf; 
4) 오브젝트 이름 알아내기 gameObject.name; 
5) 태그 알아내기 gameObject.tag;
6) Layer 알아내기

gameObject.layer;
LayerMask.LayerToName(gameObject.layer);

 

이제부터 player에서 GameObject를 사용하기 위해서 선언하고, 초기화 해주어야한다.

 

 

1) Game Object 선언, 초기화

----------------------

public GameObject (오브젝트이름)Object;

---------------------

변수처럼 선언해야 사용할 수 있다.

 

gameObject는 자기 자신만 사용하기로 약속이 되있다.(예약어)

그래서 다른 게임 오브젝트를 사용하기 위해서 gameObject를 아닌 다른 이름을 사용해야한다.

아래처럼 게임오브젝트를 선언해주자.

 

스크립트를 위와 같이 하고, 저장하면 아래와 같이 Inspector>Script에서 Enemy Object 부분이 생성된다.

None (Game Object)부분에 Enemy 게임 오브젝트를 드래그 하면 초기화가 된것이다.

 

 

* 참고로 void Start() 구문에서 초기화하면 에러생긴다. 그러니 선언하면 안된다!@

기본적으로 gameObject른 본인 오브젝트로 잡혀있으니 선언하면 오류가 뜨고,

드래그해서 초기화 해주므로enemyObject로 선언을 해줄 필요가 없다.

 void Start()
 {
        gameObject=GetComponent<GameObject>();
 }

 

 

이제부터 PlayerMove 스크립트에서 enemyObject라고 칭하는 것은 enemy의 게임오브젝트로 사용할 수 있다.

 

2) enemy Object 비활성화/ 활성화/ 상태 보기

gameObject를 활성화 시키기위해서는 아래와 같이 하면된다.

gameObject.SetActive(false);

 

enemyObject를 활성화 시키기위해서 enemyObject를 앞에 붙이면된다.

-----------------------------------------------

enemyObject.gameObject.SetActive(false);

-----------------------------------------------

 

실행하면 화면에서 에너미 오브젝트가 사라지는 것을 볼 수 있다.

 

여기에서 gameObject는 생략이 가능해서 아래와 같이 스크립팅해도 동일하다.

-----------------------------------------------

enemyObject.SetActive(false);

-----------------------------------------------

 

자 이제 배운 것을 응용해서 활성화, 상태보기를 해보자.

활성화 >>

gameObject.SetActive(true);

활성화 상태보기 >>

gameObject.activeSelf; 

 

 

 

 

 

 

***실행해보기>> 

enemyObject.SetActive(true);

enemyObject.activeSelf;

 

 

 

3) enemy Object 오브젝트 이름 / 태그 / 레이어 찍어보기

 

- 오브젝트 이름알기 : gameObject.name; 

- 태그 알아내기 : gameObject.tag;

- Layer 알아내기 : gameObject.layer;

- Layer이름 알아내기 : LayerMask.LayerToName(gameObject.layer);

 

위에서 배운것을 응용해서 앞에 enemyObject만 붙여서 실행해보자.

 

- 에너미 오브젝트 이름알기 : enemyObject.gameObject.name; 

- 태그 알아내기 : enemyObject.gameObject.tag;

- Layer 알아내기 : enemyObject.gameObject.layer;

- Layer이름 알아내기 : LayerMask.LayerToName(enemyObject.gameObject.layer);

 

gameObject생략해보자.

 

- 에너미 오브젝트 이름알기 : enemyObject.name; 

- 태그 알아내기 : enemyObject.tag;

- Layer 알아내기 : enemyObject.layer;

- Layer이름 알아내기 : LayerMask.LayerToName(enemyObject.layer);

 

Debug.Log(내용);

으로 각각 콘솔창에 찍어보자!

 

Debug.Log(enemyObject.name);

Debug.Log(enemyObject.tag);

Debug.Log(enemyObject.layer);

Debug.Log(LayerMask.LayerToName(enemyObject.layer));

 

 

다음장에서는 스프라이트 렌더러에대해서 살펴보자!

 

 

 

 

4) 레이어 변경하기

다른 오브젝트의 레이어의 이름으로 변경하기

------------------

다른오브젝트이름.layer = LayerMask.NameToLayer("레이어이름");

------------------

예시

==============

publicpublic GameObject enemyObject;

 

enemyObject.layer = LayerMask.NameToLayer("Water");

==============

관련글 더보기