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

Cosmos·2023년 4월 5일
0

학습 매체 : 책

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

저자 : 이제민


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


7.2 탄알 스크립트 준비


  • 탄알이 실제로 동작할 수 있도록 Bullet 스크립트를 생성하자.


7.2.1 Bullet의 변수

  • Bullet 스크립트에 필요한 변수는 다음과 같다.
  • speed : 이동 속력

  • bulletRigidbody : Bullet 게임 오브젝트의 리지드바디 컴포넌트

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

public class Bullet : MonoBehaviour
{
    public float speed = 8f;
    private Rigidbody bulletRigidbody;

    void Start()
    {
        
    }
    
}
  • 이동 속력 speed의 기본값을 8로 지정했다.

  • speed의 접근 한정자가 public이기 때문에 인스펙터 창에서 speed에 할당된 값을 변경할 수 있다.

  • Update( ) 메서드는 사용하지 않을 것이다.


7.2.2 탄알 속도 지정하기

  • Start( ) 메서드에서는 Bullet 게임 오브젝트의 리지드바디 컴포넌트를 bulletRigidbodydp 할당한다. 그리고 bulletRigidbody.velocity로 탄알의 속도를 변경한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour
{
    public float speed = 8f;
    private Rigidbody bulletRigidbody;

    void Start()
    {
        bulletRigidbody= GetComponent<Rigidbody>();
        bulletRigidbody.velocity = transform.forward * speed;
    }
    
}
  • transform.forward * speed는 앞쪽 방향(transform.forward)에 이동 속력(speed)을 곱해서 '게임 오브젝트의 앞쪽 방향으로 speed만큼의 속도'를 표현한 값이다. 따라서 탄알은 앞쪽으로 초당 speed만큼 이동한다.

  • 여기서 transform.forward는 현재 게임 오브젝트의 앞쪽 방향(Z축 방향)을 나타내는 Vector3 타입 변수이다.


transform

  • Transform 타입의 변수 transform은 자신의 게임 오브젝트의 트랜스폼 컴포넌트바로 접근하는 변수이다.

  • 트랜스폼 컴포넌트는 게임 오브젝트의 위치, 크기, 회전을 담당하는 컴포넌트이다. 따라서 모든 게임 오브젝트가 하나씩 가지고 있도록 강제되어 있으며 가장 자주 사용되는 컴포넌트이다.

  • 편의상 유니티의 C# 스크립트들은 자신의 게임 오브젝트의 트랜스폼 컴포넌트를 코드 상에서 transform 변수로 즉시 접근할 수 있다. 따라서 트랜스폼 컴포넌트는 GetComponent<Transform>( ) 등을 사용하여 직접 찾아오는 과정을 거칠 필요가 없다.

  • transform으로 자신의 트랜스폼 컴포넌트에 바로 접근한 다음 트랜스폼 컴포넌트가 제공하는 forward 변수게임 오브젝트의 앞쪽 방향을 알 수 있다.

transform.forward
  • 트랜스폼 컴포넌트는 위치, 크기, 회전에 대한 여러 가지 편의 기능을 제공한다. forward도 그중 하나로, 해당 트랜스폼을 가진 게임 오브젝트의 앞쪽 방향을 Vector3 값으로 제공한다.

transform과 Transform

  • 소문자로 시작하는 transform은 변수이고, 대문자로 시작하는 Transform은 타입이다. 혼동하지 말자.

7.2.3 탄알 자동 파괴하기

  • 게임 도중에는 탄알이 굉장히 많이 생성될 것이다. 플레이어가 피한 탄알은 게임 화면 바깥으로 영원히 움직이면서 게임 화면에서는 보이지 않지만 씬에 계속 남게 된다.

  • 이러면 컴퓨터 메모리를 엄청나게 낭비하게 된다. 따라서 탄알이 생성된 후 일정 시간이 흐르면 탄알이 스스로 자동 파괴되게 하자.

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

public class Bullet : MonoBehaviour
{
    public float speed = 8f;
    private Rigidbody bulletRigidbody;

    void Start()
    {
        bulletRigidbody= GetComponent<Rigidbody>();
        bulletRigidbody.velocity = transform.forward * speed;

        Destroy(gameObject, 3f);
    }
}
  • 추가한 코드는 Bullet 게임 오브젝트를 3초 뒤에 파괴한다.

Destroy( )

  • Destroy( ) 메서드는 입력한 오브젝트를 파괴한다.
 void Destroy(Object obj);
  • gameObject는 자신의 게임 오브젝트를 가리키는 변수이므로 Destroy(gameObject);를 실행하면 자신의 게임 오브젝트(여기서는 Bullet 게임 오브젝트)가 즉시 파괴된다.
 void Destroy(Object obj, float t);
  • Destroy( ) 메서드에 두 번째 값으로 초 단위로 지연시간을 줄 수 있다. 그러면 지연시간 뒤에 해당 오브젝트를 파괴한다. 따라서 Destroy(gameObject, 3f);는 3초 뒤에 자신의 게임 오브젝트를 파괴한다.

다음 강의에서 계속~

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

0개의 댓글