레벨을 탐색하는 탐사 게임 그러나 세계의 객체는 불완전하고 퍼즐을 풀고 발전을 해결하기 위해 LUA를 사용하여 스크립트해야합니다.
이 게임은 다음 라이브러리를 사용합니다.
참고 : API는 개발 중에 변경 될 수 있습니다!
스크립트/ Lua.Modules 내 에서이 템플릿을 사용하여 모듈 파일을 만듭니다.
using UnityEngine ;
namespace Lua . Modules
{
public class ModuleName : MonoBehaviour
{
}
} 예제 메소드를 만들려면 리턴 유형 (선택적으로 매개 변수)을 제공해야합니다 (메소드가 정적 및 공개인지 확인).
참고 : 매개 변수를 사용하는 경우 리턴 유형을 우회하는 방법이 있습니다 ( Lua.Modules.Miscellaneous 및 Print 참조 권장되지 않음).
// Example method
public static int ExampleMethod ( string message )
{
UnityEngine . Debug . Log ( message ) ;
return 0 ; // 0 - Success
} LUA에서 사용할 수 있도록 방법을 노출시키기 위해 두 단계가 더 있습니다. Lua.LuaManager 에는 "노출"이라는 영역이 있습니다. 거기에서 모듈의 함수를 참조하여 Func 또는 Action 만듭니다.
// Miscellaneous
script . Globals [ "ExampleMethod" ] = ( Func < string , int > ) ModuleName . ExampleMethod ; 마지막으로, 방법에 Utils.ReturnLuaObject 또는 LuaControllable.CheckOperationLegality 를 사용해야하는 경우 Lua.LuaControllable 의 메소드에 토글을 추가해야합니다. 이렇게하려면 Lua.LuaControllable 내부로 이동 한 다음 해당 지역 내부 "객체에서 허용 된 기능을 활성화하기위한 필드를 직렬화하십시오". 그런 다음 생성 된 기능의 정확한 이름으로 부울 값 (개인 및 직렬화 필드)을 만듭니다 (모든 노출 된 방법 중에서 기능을 고유하게 명명해야 함)
[ SerializeField ] private bool ExampleMethod = false ; LuaControllable.CheckOperationLegality 방법을 사용하려면 Utils.ReturnLuaObject luacontrollable으로 사용해야합니다 .CheckoperationLegality는 해당 게임 객체 및 LuaconTroller에 대한 참조가 필요합니다.
먼저 생성 된 메소드에는 문자열 매개 변수 (첫 번째 매개 변수는 표준)가 필요합니다. public static int SetPositionRelative(string controllerName, float x, float y)
보조, "utils.returnluaobject"를 사용하여 원하는 게임 객체에 대한 참조를 얻을 수 있습니다 (모든 게임 객체에 Lua.LuaControllable Serialized 필드에 고유 한 이름을 설정해야 함)
마지막으로, LuaControllable.CheckOperationLegality 사용하여 해당 객체에 명령이 허용되는지 확인할 수 있습니다. 이 메소드는 값 System.Reflection.MethodBase.GetCurrentMethod().Name 으로 호출되어야합니다.
기본 모듈 중 하나 에서이 모든 것의 예 :
// String name used in Lua
public static int SetPositionRelative ( string controllerName , float x , float y )
{
// Get a reference to the controller
var controller = Utils . ReturnLuaObject ( controllerName ) ;
// Check the controller is not null
// System.Reflection.MethodBase.GetCurrentMethod().Name is required to be passed
if ( controller . controller != null )
{
// Check the operation is allowed
switch ( controller . controller . CheckOperationLegality ( System . Reflection . MethodBase . GetCurrentMethod ( ) . Name ) )
{
case false :
return 2 ; // 2 - Illegal operation
case null :
return 3 ; // 3 - Unknown operation
}
// Any code here
return 0 ; // 0 - Command success
}
return 1 ; // 1 - Command failed
}