레트로의 유니티 게임 프로그래밍 에센스 - 5.4

Cosmos·2023년 4월 3일
0

학습 매체 : 책

책이름 : 레트로의 유니티 게임 프로그래밍 에센스

저자 : 이제민


본 내용은 해당 강의 내용을 공부하면서 정리한 글입니다.


5.4 변수로 컴포넌트 사용하기


  • 참조 변수는 실체가 아니라 실체로 향하는 참조값을 저장한다.

  • 실체에 접근하는 참조 타입 덕분에 변수로 씬에 있는 게임 오브젝트와 컴포넌트에 접근하고 이들을 조종할 수 있다.


5.4.1 물리 큐브 만들기

  • 리지드바디 컴포넌트는 물리 기능을 담당한다. Cube에 추가된 리지드바디 컴포넌트를 코드로 직접 조종할 수 있다면 Cube 게임 오브젝트에 물리적인 힘을 추가해 원하는 곳으로 점프하게 만들 수 있다.

5.4.2 변수로 리지드바디 컴포넌트 사용하기

  • 씬에 있는 게임 오브젝트와 컴포넌트를 직접 사용하려고 할 때 참조의 중요성을 이해하게 된다.

  • 참조 타입의 변수는 오브젝트 그 자체가 아니지만 오브젝트를 가리킬 수 있다.

  • 즉, Rigidbody 타입의 변수는 Rigidbody 오브젝트 그 자체는 아니지만 실제 Rigidbody 오브젝트(Rigidbody 컴포넌트)를 가리킬 수 있다.

  • 따라서 해당 변수로 실제 리지드바디 컴포넌트에 접근해 조종할 수 있다.

  • 변수로 Cube 게임 오브젝트의 Rigidbody 컴포넌트에 접근하고 힘을 추가하는 C# 스크립트를 만들어보자.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Jumper : MonoBehaviour
{
    public Rigidbody myRigidbody;

    void Start()
    {
        myRigidbody.AddForce(0, 500, 0);
    }
}
  • Rigidbody 타입의 변수 myRigidbody를 선언했다. myRigidbody는 public으로 지정되어 클래스 외부에서 접근할 수 있다.

  • 게임 시작 시 자동 실행될 Start( ) 메서드에는 게임 오브젝트가 위로 점프하도록 Rigidbody 컴포넌트에 위쪽으로 힘을 주는 처리를 구현했다.

  • Rigidbody 컴포넌트는 물리 기능을 담당한다. 따라서 힘을 주는 기능(AddForce)도 가지고 있다.

  • Rigidbody 타입에 내장된 AddForce( ) 메서드는 x, y, z 방향으로 입력한 값만큼 힘을 준다. 여기서는 y 방향으로 500만큼 힘을 주었다.

  • 이제 코드 창을 닫고 Cube에 Jumper를 추가하자.

  • 그 다음 플레이 버튼을 누르면 콘솔 창에 에러 로그가 뜬다.

  • "참조를 할당하지 않았다"는 에러가 발생했다. 변수 myRigidbody에 아직 참조를 할당하지 않았기 때문이다.

5.4.3 컴포넌트를 변수에 연결하기

  • 인스펙터 창에서 Jumper 컴포넌트를 살펴보자. ( 게임 오브젝트에 추가된 스크립트는 해당 게임 오브젝트의 컴포넌트로 취급된다. )

  • 스크립트의 public 변수는 인스펙터 창에서 편집 가능하도록 표시된다. 변수 myRigidbody는 public으로 선언되었기 때문에 My Rigidbody라는 이름으로 표시된다.

  • My Rigidbody 필드에 할당된 값이 None으로 표시되어 있다. 즉, 변수 myRigidbody가 어떠한 오브젝트도 가리키고 있지 않다.

  • 그래서 myRigidbody가 어떠한 실체도 가리키지 않고 있기 때문에 에러가 발생한 것이다.

  • 따라서 인스펙터 창에서 myRigidbody에 실제 오브젝트인 리지드바디 컴포넌트를 연결한다.

  • 인스펙터 창에서 Rigidbody 컴포넌트의 이름 위에 마우스 커서를 두고 마우스 왼쪽 버튼을 누른 상태에서 My Rigidbody 필드로 드래그하면 된다.

  • 이렇게 하면 myRigidbody에 실제 Rigidbody 컴포넌트가 연결된다. 즉, myRigidbody에 Cube 게임 오브젝트의 Rigidbody 컴포넌트로 향하는 참조가 완성된다.

  • Jumper 스크립트의 Start( ) 메서드가 실행되면서 myRigidbody.AddForce(0, 500, 0);이 실행된다.

  • 실제로는 myRigidbody에 연결된 Cube 게임 오브젝트의 Rigidbody 컴포넌트에서 AddForce( ) 메서드가 실행된다.

  • 코드에서 변수 myRigidbody를 사용한다고 생각하지만 실제로는 myRigidbody가 가리키는 실체가 사용된다는 점에 주목하자.


5.4.4 마치며

  • 유니티는 수많은 종류의 컴포넌트를 미리 만들어 제공한다. 컴포넌트클래스 타입이다. 클래스 타입의 변수는 참조 타입으로 동작한다.

  • 씬에 존재하는 모든 '실체' 컴포넌트는 코드 상에서 참조 타입의 변수로 가리키고 사용할 수 있다.

  • 다음 순서로 씬을 구성하고 게임 오브젝트와 컴포넌트를 조종한다.

1. 필요한 컴포넌트를 게임 오브젝트에 추가한다.

2. 스크립트에서 조종할 컴포넌트에 대한 변수를 선언한다.

3. 변수에 컴포넌트를 할당한다.

4. 코드에서 변수를 사용하면 그것이 가리키는 실제 컴포넌트가 동작한다.


다음 강의에서 계속~

profile
게임 개발을 목적으로 공부하고 있는 대학생입니다.

0개의 댓글