유니티 기초 강좌: 눈에 보이지 않는 슈팅 구현

이번 강좌에서는 유니티 엔진을 사용하여 ‘눈에 보이지 않는 슈팅’을 구현하는 방법에 대해 알아보겠습니다. 이 강좌는 유니티의 기초를 이해하고 있는 분들을 위한 것으로, 기본적인 스크립팅 및 게임 오브젝트의 사용법을 알면 도움이 됩니다.

1. 프로젝트 설정하기

먼저 새로운 유니티 프로젝트를 생성합니다. 유니티 허브를 열고, ‘New’ 버튼을 클릭한 후 ‘3D’ 프로젝트 템플릿을 선택합니다. 프로젝트 이름은 ‘InvisibleShooting’으로 설정하고, 적당한 저장 위치를 선택한 다음 ‘Create’ 버튼을 누릅니다.

2. 씬 구성하기

이제 기본적인 씬을 구성해 보겠습니다. 빈 게임 오브젝트를 만들어 ‘Game Manager’로 이름을 정하고, 그 아래에 ‘Player’와 ‘Enemy’라는 게임 오브젝트를 생성합니다.

2.1 Player 만들기

‘Player’ 오브젝트를 선택한 후, 3D 객체 > 큐브를 선택하여 큐브를 생성합니다. 큐브의 크기를 적절히 조절하여 플레이어 캐릭터로 사용할 것입니다. 그런 다음, 그 큐브에 Rigidbody 컴포넌트를 추가하여 물리적 특성을 부여합니다.

2.2 Enemy 만들기

‘Enemy’ 오브젝트도 같은 방법으로 큐브로 생성합니다. 이 오브젝트 역시 Rigidbody 컴포넌트를 추가해 주며, 적의 크기와 위치는 플레이어와 일정 거리를 두고 설정합니다.

3. 스크립팅

스프라이트를 눈에 보이지 않게 하려면, 불투명도를 0으로 설정할 필요가 있습니다. 이를 스크립트로 구현해보겠습니다.

3.1 PlayerController 스크립트 생성

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f;

    void Update()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
        transform.position += movement * moveSpeed * Time.deltaTime;
    }
}

위의 스크립트를 Player 오브젝트에 추가합니다. 이 스크립트는 플레이어 오브젝트를 WASD 키로 이동할 수 있게 해줍니다.

3.2 Bullet 스크립트 생성

다음으로 볼렛의 스크립트를 작성해 보겠습니다. 먼저 ‘Bullet’이라는 새로운 게임 오브젝트를 만들어 주고, Rigidbody 컴포넌트를 추가합니다.

using UnityEngine;

public class Bullet : MonoBehaviour
{
    public float speed = 20f;

    void Start()
    {
        Rigidbody rb = GetComponent();
        rb.velocity = transform.forward * speed;
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Enemy"))
        {
            Destroy(other.gameObject);
            Destroy(gameObject);
        }
    }
}

3.3 Shooting System 구현

이제 플레이어가 총을 쏠 수 있는 방법을 구현해 보겠습니다. PlayerController 스크립트에 다음 코드를 추가합니다:

public GameObject bulletPrefab;
public Transform bulletSpawn;

void Update()
{
    // 기존 이동 코드
    ...

    if (Input.GetButtonDown("Fire1"))
    {
        Shoot();
    }
}

void Shoot()
{
    Instantiate(bulletPrefab, bulletSpawn.position, bulletSpawn.rotation);
}

이 코드는 플레이어가 마우스 버튼을 클릭할 때마다 총알을 생성하는 기능을 추가합니다. 총알 프리팹을 생성한 후, 이 프리팹을 ‘bulletPrefab’ 변수에 연결합니다.

4. 눈에 보이지 않는 슈팅 구현하기

이제 볼렛이 생성되었지만, 보이지 않도록 하려면 Material을 이용하여 알파 값을 조정해야 합니다. 프리팹에 적합한 Material을 생성하고 알파 값을 0으로 설정합니다.

4.1 볼렛 Material 설정하기

using UnityEngine;

public class Bullet : MonoBehaviour
{
    public float speed = 20f;
    private Material bulletMaterial;

    void Start()
    {
        bulletMaterial = GetComponent().material;
        Color color = bulletMaterial.color;
        color.a = 0; // 볼렛의 알파값을 0으로 설정하여 보이지 않게 함
        bulletMaterial.color = color;

        Rigidbody rb = GetComponent();
        rb.velocity = transform.forward * speed;
    }
}

5. 게임 완성하기

이제 모든 기능이 구현되었습니다. 게임을 실행하면 플레이어가 이동하고 총알은 보이지 않게 발사되는 모습을 볼 수 있습니다. 이 시스템을 발전시켜 슈팅 게임으로 확장할 수 있습니다.

5.1 적 생성 및 게임 흐름 만들기

적 생성기를 작성하여 적을 Spawn 할 수 있습니다. 다음과 같은 스크립트를 GameManager에 추가합니다:

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public GameObject enemyPrefab;
    public float spawnTime = 2f;

    void Start()
    {
        InvokeRepeating("SpawnEnemy", spawnTime, spawnTime);
    }

    void SpawnEnemy()
    {
        Instantiate(enemyPrefab, new Vector3(Random.Range(-5f, 5f), 0.5f, Random.Range(-5f, 5f)), Quaternion.identity);
    }
}

6. 마무리

이번 강좌를 통해 유니티에서 눈에 보이지 않는 슈팅 메커니즘을 구현하는 방법을 배웠습니다. 이러한 기법을 활용하면 다양한 게임을 개발하는 데 많은 도움이 될 것입니다. 다음 강좌에서는 더욱 고급 기술과 내용을 다루도록 하겠습니다.

끝까지 읽어주셔서 감사합니다. 여러분의 유니티 개발 여정에 도움이 되길 바랍니다!