흐름과 Lua는 사용자가 게임 플레이를 작성할 때 사용하는 워크플로우가 다르기 때문에 서로 매우 다른 개별적인 시스템처럼 보일 수 있습니다. 그러나 사실은 상호 배타적이지 않습니다. 흐름과 Lua는 각자의 평행 해석 컨텍스트에서 아무런 문제 없이 공존합니다.
이 페이지에서는 두 시스템 간 데이터를 커뮤니케이션하고 이벤트를 트리거할 때 사용할 수 있는 몇 가지 전략을 설명합니다.
Lua 코드에서 정의한 함수를 호출하는 프로젝트에 대해 사용자 정의 흐름 노드를 정의할 수 있습니다. 이는 두 시스템을 연결하는 강력하고도 유연한 방법입니다.
이를 설정하는 방법에 대한 자세한 내용은 Lua에서 사용자 정의 흐름 노드 생성을 참조하십시오.
Script > Script Call Global 노드를 사용하면 사용자 정의 노드를 생성하지 않아도 흐름에서 원하는 Lua 함수를 호출할 수 있습니다. 데이터 커넥터를 노드의 입력 슬롯으로 연결하여 Lua 함수로 최대 5개의 인수를 전달할 수 있습니다.
사용자 정의 노드 사용과 비교해 보았을 때 이 방법의 단점은 호출한 Lua 코드에서 직접 반환 값을 검색할 수 없다는 점입니다. Lua 계산을 트리거할 수는 있지만 결과를 직접적으로 사용할 수는 없습니다.
자세한 내용은 노드 설명을 참조하십시오.
Lua 스크립트에서 정의된 함수를 호출하는 대신, Lua 스크립트 블록을 Script > Script Do String 노드의 스크립트 슬롯에 직접 입력할 수 있습니다. 노드의 In 이벤트가 트리거되면 코드 블록은 게임의 Lua 환경 내에서 해석됩니다.
위에서 볼 수 있는 것처럼, 코드 블록으로 최대 5개의 인수를 전달할 수 있습니다. 위에서 볼 수 있는 것처럼, Lua 코드는 흐름 그래프로 직접 이벤트를 반환할 수 없습니다.
자세한 내용은 노드 설명을 참조하십시오.
흐름 그래프와 Lua 스크립트는 공유된 "외부" 변수 세트의 데이터 값을 설정하고 읽을 수 있습니다. 각 수준에 대한 수준 흐름과 각 유닛에 대한 유닛 흐름은 이러한 개별적인 "외부" 변수 세트를 유지합니다.
이러한 "외부" 변수는 변수 범주의 흐름 노드를 사용하여 가져오거나 설정할 수 있는 변수와는 다르며, 다른 흐름 그래프에만 표시됩니다.
수준 흐름, 유닛 흐름 또는 엔티티 흐름의 외부 변수를 설정하려면 External > Output 범주에 있는 노드를 사용합니다. 예를 들어 External > Output > External Output Boolean을 사용하여 true 또는 false 값을 설정합니다.
흐름 그래프에 설정된 외부 변수를 읽으려면 stingray.Level.flow_variable(), stingray.Unit.flow_variable() 또는 stingray.FlowComponent.flow_variable()을 호출합니다.
Lua에서 수준 흐름 그래프, 유닛 흐름 그래프 또는 엔티티 흐름 그래프의 외부 변수를 설정하려면 stingray.Level.set_flow_variable(), stingray.Unit.set_flow_variable() 또는 stingray.FlowComponent.set_flow_variable()을 호출합니다.
Lua 스크립트가 설정한 외부 변수를 읽으려면 External > Input 범주를 사용합니다. 예를 들어 External > Input > External Input Boolean을 사용하여 true 또는 false 값을 가져옵니다.
Lua 코드는 언제든지 수준 흐름 또는 유닛 흐름 그래프로 이벤트를 촉발할 수 있습니다.
다음 예시와 같은 Lua 코드를 사용한다고 가정해 보겠습니다.
stingray.Level.trigger_event(myLevel, "explosion")
다음처럼 수준 흐름에서 이에 응답할 수 있습니다.
참고: Level.trigger_level_loaded(), Level.trigger_level_update(), Level.trigger_level_shutdown() 함수를 사용하여 수준 흐름에서 이러한 이벤트를 트리거할 수도 있습니다. 그러나 Appkit을 사용하여 프로젝트의 수준을 관리하는 경우 이러한 트리거를 자동으로 호출합니다.