Coroutines는 메인 게임 실행 사이클과 동시에 수행될 수 있는 함수입니다...


이 튜토리얼의 동영상 버전은 현재 이 언어로 제공되지 않습니다. 아래에서 자막이 포함된 영어 버전을 시청할 수 있으며, 동영상 아래에는 한국어로 번역된 스크립트가 있습니다.


영상 자막 텍스트

안녕하세요 여러분!

Unity에서 Coroutines를 사용하는 방법에 대한 기본 튜토리얼에 오신 것을 환영합니다.

Coroutines는 메인 게임 실행 사이클과 동시에 수행될 수 있는 함수입니다.

이 튜토리얼에서는 실용적인 예제를 사용하여 개념을 설명하고, 지정한 초 수만큼 작업 실행을 기다릴 수 있게 해주는 WaitForSeconds 함수도 함께 소개하겠습니다.

이 튜토리얼은 Unity에서 C# 프로그래밍에 대한 기본적인 이해를 전제로 합니다. Unity 2022 버전을 사용하여 녹화되었지만, Coroutines는 다양한 프로그래밍 언어와 이전 Unity 버전에서도 사용할 수 있습니다.

우리의 목표는 외부 이벤트가 발생하여 이 루틴을 중단할 때까지 대포가 cannonball Prefab, 즉 단순한 검은색 구체를 3초마다 자동으로 발사하도록 만드는 것입니다.

이 경우 외부 이벤트는 사용자가 S 키, 즉 "Stop"을 누르는 것입니다.

먼저 대포용 스크립트를 생성하고 이름을 "autoshoot"으로 지정합니다.

메인 클래스 내부에서 대포를 기준으로 공이 생성될 시작 지점을 지정하기 위해 세 개의 변수를 정의합니다.

public GameObject spawnPrefab;

이 public 변수에는 Unity Editor에서 cannonball prefab을 연결할 것입니다.

Vector3 spawnPosition;

Quaternion spawnRotation;

이 지점과 초기 방향은 이미 계산해 두었으므로 Start 함수 안에서 다음과 같이 두 값을 초기화합니다.

spawnPosition = transform.position + new Vector3(-1.2f, 1.8f, 0f);

spawnRotation = Quaternion.Euler(-10f, -90f, 0f);

이제 외부 이벤트가 이를 중단하지 않는 한 무한히 반복되는 루프를 구현해야 한다는 것은 분명합니다. 또한 다음 반복으로 넘어가기 전에 3초 지연 명령을 포함해야 합니다.

참고로 cannonball prefab에는 시작 시 공에 전방 초기 힘을 가하고, 3초 후에 오브젝트를 자동으로 삭제하도록 설정하는 스크립트가 포함되어 있습니다. 이는 가상 공간이나 시스템 메모리가 cannonball로 가득 차는 것을 방지하기 위함입니다.

WaitForSeconds 명령은 지정한 시간 동안 실행을 일시 중지할 수 있게 해주며, 우리의 경우에는 3초입니다.

이제 현재 스크립트의 빈 공간에 메인 루프를 작성하면서 WHILE 블록을 만들어야 합니다.

while(true) {

GameObject cannonBall = Instantiate(spawnPrefab, spawnPosition, spawnRotation, null);

yield return new WaitForSeconds(3);

}

그렇다면 이 WHILE 블록은 어디에 배치해야 할까요?

Start 안에는 배치할 수 없습니다. 그 안에서는 yield WaitForSeconds를 사용할 수 없기 때문입니다. 또한 Update에 넣으면 Update는 게임의 매 프레임마다 호출되므로 지연이 적용되지 않습니다.

따라서 반환 타입이 IEnumerator인 "shoot"이라는 함수를 생성하고, 그 안에 WHILE 블록을 포함해야 합니다.

이 함수는 StartCoroutine 명령을 사용하여 Coroutine을 시작할 수 있게 해주며, 함수 이름을 큰따옴표로 감싸 매개변수로 전달합니다.

대포는 즉시 발사를 시작해야 하므로, spawnPosition과 spawnRotation을 초기화한 직후 Start 안에 다음과 같이 작성합니다.

StartCoroutine("shoot");

이제 스크립트를 저장하고 지금까지 정의한 내용을 Unity Editor에서 실행해 보겠습니다.

Coroutine을 중지하거나 다시 시작할 수 있도록 스크립트로 돌아가 두 개의 구문을 추가하겠습니다.

S 키가 눌렸는지 확인한 뒤 StopCoroutine 함수에 "shoot" Coroutine을 매개변수로 전달하여 Coroutine을 중지할 수 있습니다.

마찬가지로 R 키가 눌렸는지 확인한 뒤 StartCoroutine 함수에 "shoot"을 매개변수로 전달하여 Coroutine을 다시 시작할 수 있습니다.

따라서 Update 안에 다음과 같이 작성합니다.

if(Input.GetKeyDown(KeyCode.S)) StopCoroutine("shoot");

if(Input.GetKeyDown(KeyCode.R)) StartCoroutine("shoot");

이 구문을 추가한 후 스크립트를 저장하고 Unity Editor로 돌아가 실행해 보겠습니다.

이 짧은 튜토리얼은 여기까지입니다. 도움이 되었기를 바랍니다. 곧 다시 만나요!

튜토리얼 검색

검색 문구 또는 여러 개의 키워드를 쉼표로 구분해 입력하세요.

이 웹사이트는 개인 사이트이며 판매 채널이 아닙니다. 3D 모델 관련 페이지는 제 작업 중 일부를 기록하기 위한 것이며, 판매 제안, 가격, 구매 방법 또는 상업적 링크를 포함하지 않습니다. 현재 맞춤형 작업, 컨설팅 또는 기타 전문적인 협업 요청은 받지 않습니다.


확장된 개인정보 및 쿠키 사용 정책