흐름및 Lua 간 통신

흐름과 Lua는 사용자가 게임 플레이를 작성할 때 사용하는 워크플로우가 다르기 때문에 서로 매우 다른 개별적인 시스템처럼 보일 수 있습니다. 그러나 사실은 상호 배타적이지 않습니다. 흐름과 Lua는 각자의 평행 해석 컨텍스트에서 아무런 문제 없이 공존합니다.

이 페이지에서는 두 시스템 간 데이터를 커뮤니케이션하고 이벤트를 트리거할 때 사용할 수 있는 몇 가지 전략을 설명합니다.

사용자 정의 흐름 노드 사용

Lua 코드에서 정의한 함수를 호출하는 프로젝트에 대해 사용자 정의 흐름 노드를 정의할 수 있습니다. 이는 두 시스템을 연결하는 강력하고도 유연한 방법입니다.

이를 설정하는 방법에 대한 자세한 내용은 Lua에서 사용자 정의 흐름 노드 생성을 참조하십시오.

흐름에서 전역 Lua 함수 호출

Script > Script Call Global 노드를 사용하면 사용자 정의 노드를 생성하지 않아도 흐름에서 원하는 Lua 함수를 호출할 수 있습니다. 데이터 커넥터를 노드의 입력 슬롯으로 연결하여 Lua 함수로 최대 5개의 인수를 전달할 수 있습니다.

사용자 정의 노드 사용과 비교해 보았을 때 이 방법의 단점은 호출한 Lua 코드에서 직접 반환 값을 검색할 수 없다는 점입니다. Lua 계산을 트리거할 수는 있지만 결과를 직접적으로 사용할 수는 없습니다.

자세한 내용은 노드 설명을 참조하십시오.

흐름 내에서 직접 Lua 코드 입력

Lua 스크립트에서 정의된 함수를 호출하는 대신, Lua 스크립트 블록을 Script > Script Do String 노드의 스크립트 슬롯에 직접 입력할 수 있습니다. 노드의 In 이벤트가 트리거되면 코드 블록은 게임의 Lua 환경 내에서 해석됩니다.

위에서 볼 수 있는 것처럼, 코드 블록으로 최대 5개의 인수를 전달할 수 있습니다. 위에서 볼 수 있는 것처럼, Lua 코드는 흐름 그래프로 직접 이벤트를 반환할 수 없습니다.

자세한 내용은 노드 설명을 참조하십시오.

"외부" 입력 및 출력을 통해 데이터 교환

흐름 그래프와 Lua 스크립트는 공유된 "외부" 변수 세트의 데이터 값을 설정하고 읽을 수 있습니다. 각 수준에 대한 수준 흐름과 각 유닛에 대한 유닛 흐름은 이러한 개별적인 "외부" 변수 세트를 유지합니다.

이러한 "외부" 변수는 변수 범주의 흐름 노드를 사용하여 가져오거나 설정할 수 있는 변수와는 다르며, 다른 흐름 그래프에만 표시됩니다.

흐름에서 Lua로 데이터 전달

Lua에서 흐름으로 데이터 전달

Lua에서 흐름 이벤트 트리거

Lua 코드는 언제든지 수준 흐름 또는 유닛 흐름 그래프로 이벤트를 촉발할 수 있습니다.

다음 예시와 같은 Lua 코드를 사용한다고 가정해 보겠습니다.

stingray.Level.trigger_event(myLevel, "explosion")

다음처럼 수준 흐름에서 이에 응답할 수 있습니다.

참고: Level.trigger_level_loaded(), Level.trigger_level_update(), Level.trigger_level_shutdown() 함수를 사용하여 수준 흐름에서 이러한 이벤트를 트리거할 수도 있습니다. 그러나 Appkit을 사용하여 프로젝트의 수준을 관리하는 경우 이러한 트리거를 자동으로 호출합니다.