재미있는 실감미디어

꿈꾸는대로 만들어집니다.

유니티기초[유니티 기초]34_GetComponent( ) 다양하게 살펴보기

김혜영
2020-04-25
조회수 3365

유튜브 34 - https://youtu.be/41WzBW6spFY


안녕하세요~ 오늘은 GetComponent에 대하여 좀 더 깊이 다룹니다. 이제 게임의 스코어 등 작업을 해야 하는데요. 기본적으로 GetComponent 를 잘 알아야 합니다.


오늘 배울 내용은 다음과 같습니다.

  • 19강에서 배웠던 GetComponent 확인하기
  • GetComponent의 다양한 사용법 살펴보기
  • 다른 게임 오브젝트의 컴포넌트 접근하기
  • Tag를 이용하여 다른 게임 오브젝트 접근하기


GetComponent 는 초반에 19강에서 간단히 다루었었습니다. 기억 나시나요? 이렇게 게임 오브젝트가 가지고 있는 컴포넌트를 GetComponent 메서드를 통해 확인, 접근했었던 기억이 있습니다. GetComponent 를 통해 원하는 타입의 컴포넌트를 자신의 게임 오브젝트에서 찾아오게 되며, < > 로 가져올 타입을 받는 기법을 제네릭(Generic) 기법이라고 합니다. 


다음의 코드를 작성해서 확인해 봅니다. 기존 작업하는 파일에 해도 되고, 새로 만들어도 됩니다. 간단히 스크립트를 하나 생성하고, 게임 오브젝트에 스크립트를 어태치한 후 다음의 코드를 확인하면 됩니다. (영상을 참고하세요^^) 

다음과 같이 GetComponent 를 통해 다양한 방법으로 컴포넌트를 받아올 수 있습니다. 굳이 외우려고 하지 말고, 다양한 표현법이 있다 ~ 요런 정도로 확인하도록 합니다. 우리가 구글링을 통해 공부하다보면 이런식으로 다양한 표현법을 만나기때문에 간단히 알고 넘어가겠습니다.

using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class test : MonoBehaviour

{

    void Start() {

        Transform tr1 = GetComponent<Transform>();

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

        Transform tr3 = (Transform)GetComponent("Transform");

        Transform tr4 = (Transform)GetComponent(typeof(Transform));

        Debug.Log(tr1);

        Debug.Log(tr2);

        Debug.Log(tr3);

        Debug.Log(tr4);

    }

}


오브젝트들은 서로 독립적으로 작동합니다. 자신 외에 다른 오브젝트의 컴포넌트에 접근하려면 다음의 방법을 사용합니다.

public 으로 GameObject 타입의 other 변수를 선언한 후, other 변수에 GetComponent를 이용하여 Transform 컴포넌트를 얻어 옵니다. 이때 미리 Transform 타입으로 만든 tr 변수에 값을 할당하고, Debug.Log( )를 통해 값을 확인합니다. tr 변수값도 확인하고, tr.position을 통해 속성도 잘 읽어오는 지 확인합니다. 이렇게 GetComponent를 통해 다른 게임 오브젝트의 컴포넌트를 접근할 수 있습니다.

using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class test : MonoBehaviour

{

    private Transform tr;

    public GameObject other;


    void Start() {

        tr = other.GetComponent<Transform>();

        Debug.Log(tr);

        Debug.Log(tr.position);

    }

}


이때 중요한 것이 public으로 선언해야 하는 점입니다. public으로 선언된 변수는 다음과 같이 인스펙터 창에 활성화되고, 여기에 원하는 게임오브젝트를 등록하면 됩니다. 이해가 되지요?


이번에는 스크립트를 wall1에 어태치하여 봅니다. 이전에 Player에게 어태치한것은 지우면 됩니다.  wall1에 스크립트를 어태치하고, wall1에서 Player를 접근하는 방법을 살펴보도록 합니다.


Player의 인스펙터 창에서 Player의 태그 이름을 지정해 줍니다. 미리 만들어진 Player을 바로 적용합니다.


다음과 같이 코드를 작성해봅니다. 하나씩 살펴보면 this는 스크립트가 어태치된 자기 자신을 의미하는것을 알 수 있습니다. Player의 Tag를 이용하여 Player에게 접근할 수 있음을 볼 수 있습니다. 와우^^


오늘 배운것이 이해가 잘 되셨나요? 매우 중요하면서도 살짝 어렵지만 여러번 테스트하면 충분히 이해할 수 있을 듯 합니다. ^^ 오늘도 수고하셨습니다~~~

2 0

매일 한알의 마늘처럼 하나의 미션 수행!

동굴뛰쳐나가지 않고 매일 하나의 마늘을 먹기!!!

게임이나 VR, AR 에 유니티가 언리얼과 같이 많이 사용된다고 듣긴 했지만 나와는 관계없는 프로그램 같았습니다. 그러다가 우연한 계기로 게임 디자인을 하면서 유니티에 관심이 생겼습니다. 


자바스크립트가 유니티와 연동된다고 하니, 유니티가 매력있게 다가왔습니다. 유니티까지 활용한다면 작업 영역의 확장 뿐만 아니라 재미있는 콘텐츠를 제작할수 있겠다는 가능성이 보였습니다.


내가 기획하고, 디자인하고, 개발까지 하여 하나의 게임 앱을 만들수가 있다니! 얼마나 달콤한 유혹인지 모릅니다. 물론 수 많은 산을 넘고 에러를 넘고, 오류를 넘어야 하는 것은 각오를 해야 합니다. 그럼에도 불구하고 무척 매력적 입니다. 인고의 시간을 지나면 나는 상상력을 구현할수 있는 하나의 툴을, 도구를 장착할수 있는 것입니다. 아!이!언!맨! 처럼 말이지요!!!


카카오프로젝트 100은 게으른 저를 동기부여해 줍니다. 당장 통장에 계좌가 찍히는 일은 열심히 하게 되지만, 새로운것을 공부할 때는 의지가 참 약해지고 용두사미가 됩니다. 그런 의미에서 카카오프로젝트 100은 100일동안 의지를 불태울수 있는 작은 동기가 됩니다. 카카오프로젝트 시즌1에서는 자바스크립트 기초를 정리했습니다. 

시즌 2에서는 새로운 공부를 도전합니다. 바로 유!니!티!


여러분 생각은 어떤가요?

top