Unity - 5. Object

땡구의 개발일지·2025년 4월 26일

Unity마스터

목록 보기
18/78
post-thumbnail

오브젝트를 많이 언급하고 다루긴 했지만, 정확히 무엇인지 알아보자

오브젝트

  • 단어의 뜻은 물체. 현실에서의 오브젝트를 예로 들자면 책상을 기준으로 보면 연필, 공책, 책상 등 눈에 보이는 모든 것들이 오브젝트다
  • 유니티에서 오브젝트는 게임 오브젝트, 컴포넌트, 스크립트 등 모든 것을 말한다.

게임 오브젝트

  • 씬을 구성하는 오브젝트이며 게임에 존재하는 모든 오브젝트는 게임 오브젝트
  • 씬에서 눈으로 볼 수 있는 오브젝트, 씬에서 볼 수 없는 기능을 담는 일종의 컨테이너
  • 게임 오브젝트는 그 자체로는 아무 기능을 하지 않는다
  • 속성, 기능들은 컴포넌트들이 가진다
  • 게임 오브젝트는 컴포넌트들을 가지기 위한 컨테이너
    GameObject gameObj;

게임오브젝트 구성요소

  • 모든 구성요소들은 인스펙터 창에서 직접 확인할 수 있다
  • name

    • 이름
    • 인스펙터 창에서 편집 가능하다. 하이라키 창에서 편집된 이름을 볼 수 있음
  • active

    • 활성화 여부
    • 비활성화인 경우엔 씬에 없는 게임 오브젝트로 취급됨
    • 이걸로 오브젝트 풀도 구현한다
  • static

    • 정적상태 여부
    • 런타임 당시 변경되지 않는 데이터를 지정하여 최적화
  • tag

    • 태그, 꼬리표
    • 게임 오브젝트를 특정하기 위한 수단으로 사용. 적게 사용해야함
    • 플레이어, 포탄, 적 등
    // 씬에서 게임오브젝트 참조 방법
    public Gameobject target;
    private void Start()
    {
    	// 이름으로 찾을 수 있지만, 비추천
      // target = GameObject.Find("Main Camera")
    	// 태그로 찾기 추천
    	target = GameObject.FindGameObjectWithTag("MainCamera");
    }
  • layer

    • 레이어
    • 씬에서 게임 오브젝트를 분리하는 기준 (카메라의 선별적 표현, 충돌 그룹, 등)
    • 충돌 처리 여부를 결정하는 데 쓰일 수 있다. 포탄이 "적" 레이어와 충돌 한 경우
    • 프로젝트 세팅에서 충돌 제외 처리도 가능하다
  • component

    • 기능 모듈들
    • 게임 오브젝트의 실질적인 기능을 수행(본체)

컴포넌트

  • 게임 오브젝트기능과 속성을 나타낸다
  • 컴포넌트가 없는 오브젝트는 빈 물체다 (의미 그대로 물체의 형상조차도 없다)
  • 그래서 게임 오브젝트는 컨테이너, 박스라고 볼 수 있다.
  • 게임에서 사용할 기능을 구현한 하나의 단위
  • 게임오브젝트의 작동과 관련한 부품
  • 게임오브젝트에 추가, 삭제하는 방식의 조립형 부품

게임 오브젝트 키워드

  • 자기 자신(게임오브젝트) 를 쓰고 싶을 경우
// 게임 오브젝트의 자기 자신
gameObject;

활성화 설정

gameObject.activeSelf = true;

컴포넌트 필드

// 외부, 또는 논리 처리로 컴포넌트도 객체를 가져올 수 있다
public Component comp;

게임오브젝트에 컴포넌트 추가

  • 기본적으로 게임 오브젝트의 인스펙터 창에서 Add Component를 누르면 된다
  • AddComponent

    // target에 컴포넌트를 추가한다
    target.AddComponent<Rigidbody>();
  • GetComponent

    GetComponent<>();
    // 예시
    // A 게임 오브젝트에 B 오브젝트의 리지드 바디 충돌체 컴포넌트를 추가한다
    A = B.GetComponent<Rigidbody>();
  • GetOrAddComponent

    A = B.GetOrAddComponent<Rigidbody>();
    • B가 해당 컴포넌트를 가지고 있으면 A에 대입
    • 없으면 만든 다음 대입

컴포넌트 추가 예시

public GameObject target;
public Transform camTrans;
public Camera camComp;
public void Start()
{
	camTrans = target.transform;
	camComp = target.GetComponent<Camera>();
}

  • 인스펙터 창에서 camTrans, camComp에 다른 게임 오브젝트의 스크립트들을 대상으로 넣을 수 있다

Transform Component

  • 게임 오브젝트의 위치(position), 회전각(rotation), 크기(scale)(x,y,z) 정보를 가진다

MonoBehaviour

  • 컴포넌트가 기본클래스로 하는 클래스로 유니티 스크립트가 파생되는 기본 클래스
  • 게임오브젝트에 스크립트를 컴포넌트로서 연결할 수 있는 구성을 제공
  • 이 컴포넌트를 사용하는 스크립트 들은 gameObject와 같은 키워드 들을 사용할 있다
profile
개발 박살내자

0개의 댓글