Juego de exploración donde exploras los niveles, sin embargo, los objetos en el mundo están incompletos y debes escribirlos usando Lua para resolver rompecabezas y avanzar.
Este juego usa las siguientes bibliotecas:
Nota : ¡La API está sujeta a cambios durante el desarrollo!
Dentro de los scripts/ Lua.Modules , cree un archivo de módulo utilizando esta plantilla:
using UnityEngine ;
namespace Lua . Modules
{
public class ModuleName : MonoBehaviour
{
}
} Para crear un método de ejemplo, debe proporcionar un tipo de retorno (opcionalmente con parámetros), por ejemplo (asegúrese de que el método sea estático y público):
Nota : Hay una manera de omitir un tipo de retorno si usa un parámetro (ver Lua.Modules.Miscellaneous e Print sin embargo, esto no se recomienda)
// Example method
public static int ExampleMethod ( string message )
{
UnityEngine . Debug . Log ( message ) ;
return 0 ; // 0 - Success
} Para exponer el método para que se pueda usar en LUA, hay dos pasos más. Dentro de Lua.LuaManager , hay una región llamada "Expose". Allí, cree un Func o Action con una referencia a las funciones en su módulo, por ejemplo,
// Miscellaneous
script . Globals [ "ExampleMethod" ] = ( Func < string , int > ) ModuleName . ExampleMethod ; Finalmente, se requiere agregar una palanca al método dentro de Lua.LuaControllable si el método requiere el uso de Utils.ReturnLuaObject o LuaControllable.CheckOperationLegality . Para hacer esto, ingrese a Lua.LuaControllable y luego dentro de la región "Serialice los campos para habilitar las funciones permitidas en un objeto". Luego cree un valor booleano (privado y serializefield) con el nombre exacto de la función creada (que requiere que su función se nombre de manera única entre todos los métodos expuestos) EG
[ SerializeField ] private bool ExampleMethod = false ; Para utilizar el método LuaControllable.CheckOperationLegality Compatación de la legalidad, también debe usar Utils.ReturnLuaObject como Luacontrollable. La capacidad de vergüenza requiere una referencia a ese objeto de juego y su Luacontroller.
Primero, el método creado requiere un parámetro de cadena (el primer parámetro es el estándar) como este: public static int SetPositionRelative(string controllerName, float x, float y)
Secundaria, se puede obtener una referencia al objeto de juego deseado utilizando "utils.returnluaObject" (que requiere que todos los objetos de juego tengan un nombre único establecido en su campo serializado Lua.LuaControllable )
Y finalmente, es posible verificar si se permite un comando en ese objeto usando LuaControllable.CheckOperationLegality . Se debe llamar a este método con el valor System.Reflection.MethodBase.GetCurrentMethod().Name .
Y ejemplo de todo esto de uno de 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
}