Игра в исследование, в которой вы исследуете уровни, однако объекты в мире неполны, и вы должны скрепить их, используя 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 ; Наконец, необходимо добавить переключение к методу внутри Lua.LuaControllable , если метод требует использования либо Utils.ReturnLuaObject , либо LuaControllable.CheckOperationLegality . Для этого зайдите внутрь Lua.LuaControllable , а затем внутри региона «сериализуйте поля для обеспечения допустимых функций на объекте». Затем создайте логическое значение (частное и сериализационное поле) с точным именем созданной функции (требуя, чтобы ваша функция была однозначно названа среди всех экспонированных методов) Например) EG
[ SerializeField ] private bool ExampleMethod = false ; Чтобы использовать метод LuaControllable.CheckOperationLegality , вы также должны использовать Utils.ReturnLuaObject в качестве luacontrollable.checoperationLegality требует ссылки на этот игровой объект и его Luacontroller.
Сначала созданный метод требует параметра строк (первый параметр - это стандарт), такой как этот: public static int SetPositionRelative(string controllerName, float x, float y)
Второстепенное, ссылка на разыскиваемый игровой объект может быть получен с использованием «utils.returnluaobject» (требуя, чтобы все игровые объекты имели уникальное имя, установленное в их Lua.LuaControllable Serialized Field)
И, наконец, можно проверить, разрешена ли команда на этом объекте с помощью 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
}