본문 바로가기
프로그래밍/Unity

Unity에서 게임오브젝트 접근하는 방법에 대해..

by 메르세데쓰 2015. 2. 4.
반응형

 

 

안녕하세요 메르세데스입니다.  

 

Unity도 C#이나 JSP를 이용하는 툴입니다.   프로그램이죠..     이런 툴을 잘 다루고 편하게 사용하려면..  오브젝트/컴포넌트 기반으로 되어있는 구조안에서.. 접근하는 방법을 잘 아느냐 모르느냐에 달려 있는 것 같습니다.

 

게임내 캐릭터가 쏜 화살이 날라가 적군을 맞췄는데 에너지 게이지가 10% 줄어들었습니다.   내가 마우스로 바닥에 떨어져있는 금화를 클릭하였더니 내 인벤토리안으로 들어왔습니다. 물론 금화가 더 늘어났겠죠?  

 

Game내 발생되는 많은 것들이 결국에는 오브젝트를 서로 참조해가면서 만들어지는 것이라 하겠습니다.  다만 그것들을 C#이나 JSP와 같은 프로그램언어를 갖고 구현한것에 지나지 않은것이지요.. 

 

오브젝트를 접근하는 여러가지 방법을 잘 알고 활용할 줄 안다면.. 어렵지 않게 작품을 만들수 있지 않을까요? 서론이 길었습니다.

 

 

1. Inspector(인스펙터)를 이용한 접근방법

 

첫번째 방법입니다. 이건 유니티화면에서 해당 오브젝트를 끌어다 붙여넣는 방법입니다. 직관적인 방법이죠.. 강의나 동영상을 봤다면 금방 이해가 갈텐데.. 제가 처음 책으로 접하고 이해하려고 하였을때 햇갈리기만 했습니다. 사실 제가 남들보다 이해력이 좀 떨어져서요 ㅜㅜ

 

 

Unity Inspector
Unity Inspector를 이용한 접근방법

 

 

왼쪽에 Project메뉴에 있는 bullet이라는 프리팹을 끌어다가가..  오른쪽에 있는 미리 만들어둔.. public으로 선언된 bullet game object에 붙어 넣은것입니다. 

 

물론 ..그냥  붙여 넣는다고 다 되는건 아니고요.. 사전작업이 필요합니다.

 

 

Unity C# public
Unity C# public으로 선언해야 유니티에서 접근 할 수 있다

 

참고로 C#으로 작성하였고요..   public으로 선언이된것은..밖에서도 참조가 가능하잖아요..    이렇게 선언을 한 것에 일종의 링크를 걸어 놓은 것이라고 하겠습니다. 

 

이렇게하면.. 유니티에 만들어놓은 Prefab-bullet에 접근을 하게 되는거니..  내가 원하는대로 기능을 추가하거나 주무를 수 있겠죠?

 

 

 

2.게임오브젝트의 부모 자식관계를 이용한 접근..

 

이 경우는.. 게임오브젝트가 부모자식관계일경우 유용한 방법입니다.

 

 

Unity 부모자식관계
Unity 부모자식관계의 경우 transform.Find 메소드를 이용하여 접근할 수 있다.

 

 

Hierarchy 창에서보면.. Cube아래에.. enermy라는 게임오브젝트를 만들어 넣었거든요..

 

스크립트에서.. 부모인 Cube에 script를 만들어서.. 위의 화면처럼..  "enermy"의 이름을 갖는 것을 찾아서.. y축에 10의 힘을 주는것 입니다. 물론 반대의 경우도 가능합니다.  자식이 부모를 찾는 경우도 있을 수 있잖아요?

 

transform.parent.rigidbody.AddForce (0, 10, 0);  

 

이런식으로   .parent 로 접근을 하면 되는것이죠..

 

 

 

3.게임오브젝트의 이름과 태그를 이용한 접근방법

 

이 경우는.. 좀 더 나아가서.. 부모자식관계도 필요없고 이름,혹은 태그만 알았을 경우에 접근하는 방법입니다. 

 

연결고리가 없는  GameObject에 접근하는 방법이기때문에  해당타입의 객체를 생성하고.. Find메소드와 FindWithTag 메소드로 오브젝트명과 태그를 찾으실 수 있습니다.

 

Unity GameObject 접근
GameObject.Find , FindWidthTag메소드로 접근할 수 있다

 

게임오브젝트야..뭐.. 만들어놓은 이름이니 넘어가고요.. tag같은경우.. Inspector 화면 오른쪽상단에 새로 만들거나 설정하는 메뉴가 있습니다.

 

 

Unity tag 지정
Unity tag 지정및 생성

 

갑자기 급 궁금증이 생기는데요..  여러개의 같은 이름을 가진 게임오브젝트나 태그들을 동시에 제어하는 방법이 없을까요?

 

동일한 이름이나 동일 태그를 지정하여  GameObject를 여러개 복사해서 놓고.. AddForce와 같이 물리힘을 주는것을 만들어 실행시켜보니.. 이상하게 하나만 반응하네요?  

 

네 맞습니다..  가장 먼저 찾은 것을 객체에 할당해 버리는것이죠..이상할게 없습니다. 그렇게 하라고 코딩을 했으니까요 ㅜㅜ

 

제가만약 유니티 게임만들기에 입문하기전에 C# 책을 뒤적거리지 않았다면 이런 문제를 해결하느라 많은 시간을 소비하고..스트레스를 좀 받았을 것 같습니다 ..  아마 이해하는데 많은 시간이 걸렸을 것 같습니다.

 

 

Unity C# 복수의 게임오브젝트접근
배열을 이용하여 간단하게 접근할 수 있다.

배열로 만들어서 담아버리면되겠죠? 마침 복수형의 것들을 찾을 수 있는 메소드도 구비되어있으니..   그래서.. for문에 태워버리면 원하는 결과를 얻었습니다!

 

 

일단 이정도만 정리해보도록 하겠습니다. 저도 배우는 입장이라 ㅜㅜ

 

근데 제가 느끼기에 확실한것은.. 스크립트를 갖고 오브젝트에 접근하는 방법만 잘 다룬다면.. 절반은 성공한 것 같다는 생각이 드네요 감사합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

댓글