목차
- 서론
- 일반적인 프로세스
- C# 코드 분석
서론
이번 시간에는 유니티를 이용하여 전통적인 슈팅 게임이라고 할 수 있는 Galaga 게임과 비슷한 비행 슈팅 게임을 만들어 보겠습니다. 2d 게임 중에서는 비교적 단순한 구조와 로직을 가지고 있어서 게임을 처음 만드는 사람들에게도 좋은 연습이 될 수 있습니다. 유니티 게임을 만들기 위한 일반적인 프로세스와 게임의 로직을 구성하는 C# 코드를 알아보겠습니다. 일반적인 프로세스는 다음과 같습니다:
일반적인 프로세스
- 새 Unity 프로젝트를 만듭니다: Unity를 열고 새 2D 프로젝트를 만듭니다.
- Asset을 가져옵니다: 스프라이트, 사운드 및 배경과 같은 게임의 자산을 가져와야 합니다. 자체 Asset을 생성하거나 온라인에서 찾을 수 있습니다. Unity Asset Store와 같이 무료로 사용할 수 있는 리소스가 많습니다.
- 플레이어를 만듭니다: 그 플레이어가 게임의 주인공입니다. 플레이어의 스프라이트를 만들고 플레이어가 화면을 이동할 수 있도록 이동 컨트롤을 추가해야 합니다.
- 적을 만듭니다: 적들은 플레이어가 반드시 이겨야 하는 게임의 다른 캐릭터들입니다. 적을 위한 스프라이트를 만들고 움직임과 공격 패턴을 추가해야 합니다.
- 촬영 역학을 추가합니다: 플레이어와 적 모두 발사체를 쏠 수 있어야 합니다. 발사체 스프라이트를 만들고 그 움직임과 동작에 논리를 추가해야 합니다.
- 충돌 감지를 구현합니다: 발사체가 적이나 플레이어와 부딪히면 충돌로 등록해야 합니다. 충돌을 감지하고 적절하게 대응하려면 코드를 추가해야 합니다.
- 사용자 인터페이스를 만듭니다: 플레이어의 점수 및 기타 관련 정보를 표시하는 사용자 인터페이스를 만들어야 합니다.
- 게임 로직을 구현합니다: 마지막으로 게임 시작 시간, 종료 시간 및 플레이어가 레벨을 진행하는 방법을 결정하는 논리를 추가해야 합니다.
C# 코드 분석
스크립트의 각 섹션을 자세히 살펴보겠습니다:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
스크립트에 대한 네임스페이스 및 라이브러리 가져오기입니다. "using" 키워드는 C#에서 네임스페이스 및 라이브러리를 가져오는 데 사용됩니다. 이 스크립트에서는 "System.Collections", "System.Collections.Generic", "UnityEngine" 네임스페이스를 가져옵니다.
public class GameController : MonoBehaviour {
이 줄은 Unity의 "MonoBehaviour" 클래스에서 상속되는 "GameController"라는 새로운 public 클래스를 정의합니다. 이것은 게임플레이 로직과 게임 오브젝트를 제어하는 게임의 메인 스크립트입니다.
public GameObject enemyPrefab;
public int numEnemies;
public float spawnWait;
public float startWait;
public float waveWait;
이러한 변수는 Unity editor에서 액세스하고 수정할 수 있는 public 변수입니다. "public" 키워드를 사용하면 다른 스크립트와 Unity 편집기에 표시됩니다. 이러한 변수는 적의 수, 산란 간 시간 및 파동 간 시간을 제어하는 데 사용됩니다.
private int score;
이는 "GameController" 클래스 내에서만 액세스할 수 있는 private 변수입니다. 이것은 플레이어의 점수를 기록하는 데 사용됩니다.
void Start()
{
StartCoroutine(SpawnWaves());
}
스크립트가 시작될 때 자동으로 호출되는 "Start" 메서드입니다. 그것은 코루틴을 사용하여 "Spawn Waves" 메소드를 호출합니다.
이것은 "Spawn Waves" 코루틴 메소드입니다. 그것은 지정된 간격으로 적들의 물결을 생성합니다. 그것은 먼저 "StartWait" 시간을 기다렸다가 첫 번째 물결의 적을 발생시킵니다. 그런 다음 무한 루프로 들어가 각 생성 사이에 지정된 시간 간격으로 지정된 수의 적을 생성합니다. 모든 적이 생성된 후 다음 파형을 시작하기 전에 "waveWait" 시간을 기다립니다. "벡터 2" 물체 "spawn Position"은 적의 위치에 대한 x와 y 좌표를 결정하는 데 사용되며, "Quaternion" 물체 "spawn Rotation"은 적의 회전을 결정하는 데 사용됩니다.
public void AddScore(int newScoreValue)
{
score += newScoreValue;
}
이것은 다른 스크립트에서 호출할 수 있는 "AddScore"라는 public 메서드입니다. 정수 매개 변수 "newScoreValue"를 가져와서 "score" 변수에 추가합니다.
void Update()
{
// Update user interface
}
이것은 프레임당 한 번씩 호출되는 "Update" method입니다. 현재 비어 있지만 사용자 인터페이스를 업데이트하거나 다른 게임 로직을 처리하는 데 사용할 수 있습니다.
댓글