O jogo de exploração em que você explora os níveis, no entanto, os objetos no mundo estão incompletos e você deve roteirizá -los usando a Lua para resolver quebra -cabeças e avançar.
Este jogo usa as seguintes bibliotecas:
Nota : A API está sujeita a alterações durante o desenvolvimento!
Dentro dos scripts/ Lua.Modules , crie um arquivo de módulo usando este modelo:
using UnityEngine ;
namespace Lua . Modules
{
public class ModuleName : MonoBehaviour
{
}
} Para criar um método de exemplo, você deve fornecer um tipo de retorno (opcionalmente com parâmetros), por exemplo (verifique se o método é estático e público):
Nota : Existe uma maneira de ignorar o tipo de retorno se você usar um parâmetro (consulte Lua.Modules.Miscellaneous and Print no entanto, isso não é recomendado)
// Example method
public static int ExampleMethod ( string message )
{
UnityEngine . Debug . Log ( message ) ;
return 0 ; // 0 - Success
} Para expor o método para que ele possa ser usado em Lua, há mais duas etapas. Dentro Lua.LuaManager , há uma região chamada "Expose". Lá, crie uma Func ou Action com uma referência às funções do seu módulo, por exemplo
// Miscellaneous
script . Globals [ "ExampleMethod" ] = ( Func < string , int > ) ModuleName . ExampleMethod ; Finalmente, é necessário adicionar uma alternância ao método dentro de Lua.LuaControllable se o método exigir o uso de Utils.ReturnLuaObject ou LuaControllable.CheckOperationLegality . Para fazer isso, vá dentro Lua.LuaControllable e depois dentro da região "serialize os campos para permitir funções permitidas em um objeto". Em seguida, crie um valor booleano (privado e serializefield) com o nome exato da função criada (exigindo que sua função seja nomeada exclusivamente entre todos os métodos expostos), por exemplo,
[ SerializeField ] private bool ExampleMethod = false ; Para usar o método LuaControllable.CheckOperationLegality , você também deve usar Utils.ReturnLuaObject como luacontrollable.CheckoperationLegalidade requer uma referência a esse objeto de jogo e seu Luacontroller.
Primeiro, o método criado requer um parâmetro String (o primeiro parâmetro é o padrão) como este: public static int SetPositionRelative(string controllerName, float x, float y)
Secundário, uma referência ao objeto de jogo procurada pode ser obtida usando "utils.returnluaObject" (exigindo que todos os objetos do jogo tenham um nome exclusivo definido em seu campo serializado Lua.LuaControllable )
E, finalmente, é possível verificar se um comando é permitido nesse objeto usando LuaControllable.CheckOperationLegality . Este método deve ser chamado com o value System.Reflection.MethodBase.GetCurrentMethod().Name .
E exemplo de tudo isso de um dos módulos básicos:
// 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
}