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 타입
WaitForSeconds(sec)— 지정 초만큼 대기WaitForEndOfFrame()— 프레임 끝까지 대기WaitForFixedUpdate()— FixedUpdate 까지 대기WaitUntil(predicate)/WaitWhile(predicate)— 조건 기반 대기
전체 목록은 Reference Shortcuts 의 System / Engine 섹션을 참고하세요.