Reference읽기 시간: 4분최근 수정: 2026. 4. 14

Coroutine

Unity Life-Cycle 기반 Coroutine 을 Viven Script 에서 사용하는 방법. xlua.util.cs_generator 로 Lua 함수를 Unity Coroutine 으로 변환합니다.

Coroutine 으로 작업을 비동기로 수행할 수 있습니다. Unity 와 Lua 모두 Coroutine 을 제공하지만, Unity Life Cycle 과 맞물려야 하므로 Viven Script 에서는 Unity Coroutine 을 사용합니다.

Lua 에서 Unity Coroutine 을 생성하려면 xlua.util 라이브러리를 사용합니다.

설정

VivenBehaviour 파일 최상단에서 require 로 xlua.util 을 로드합니다.

local util = require 'xlua.util'

람다 함수로 시작

util.cs_generator 가 Lua 의 람다 함수를 Unity Coroutine 으로 변환합니다.

self:StartCoroutine(util.cs_generator(function()
  Debug.Log("Coroutine Start")
end))

일반 함수로 시작

람다 대신 이름 있는 함수를 넣어도 됩니다. 반환값은 Unity Coroutine 인스턴스 로, C# 과 동일하게 제어할 수 있습니다(StopCoroutine 등).

local util = require 'xlua.util'
local routine
local isRolling = false

function soundPlay()
  routine = self:StartCoroutine(util.cs_generator(OnSoundPlay))
end

function OnSoundPlay()
  while isRolling == true do
    eventInstance:PlayOneShot()
    coroutine.yield(WaitForSeconds(0.2))
  end
end

StartCoroutine 시그니처

function UnityEngine.MonoBehaviour:StartCoroutine(routine)
  -- routine: System.Collections.IEnumerator
  -- returns: UnityEngine.Coroutine
end

자주 쓰는 yield 타입

전체 목록은 Reference Shortcuts 의 System / Engine 섹션을 참고하세요.