レベルを探索する探索ゲームは、世界のオブジェクトが不完全であり、LUAを使用してパズルを解き、前進するためにそれらをスクリプト化する必要があります。
このゲームでは、次のライブラリを使用しています。
注:APIは、開発中に変更される場合があります!
スクリプト/ Lua.Modules内で、このテンプレートを使用してモジュールファイルを作成します。
using UnityEngine ;
namespace Lua . Modules
{
public class ModuleName : MonoBehaviour
{
}
}サンプルメソッドを作成するには、リターンタイプ(オプションでパラメーターを備えた)を提供する必要があります(メソッドが静的でパブリックであることを確認):
注:パラメーターを使用する場合、返品タイプを提供する方法があります( Lua.Modules.Miscellaneous and Print参照してくださいが、これは推奨されません)
// Example method
public static int ExampleMethod ( string message )
{
UnityEngine . Debug . Log ( message ) ;
return 0 ; // 0 - Success
} LUAで使用できるようにこの方法を公開するには、さらに2つのステップがあります。 Lua.LuaManagerには、「Expose」と呼ばれる地域があります。そこに、モジュールの関数を参照して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として使用する必要があります。
最初に作成されたメソッドには、このような文字列パラメーターpublic static int SetPositionRelative(string controllerName, float x, float y)最初のパラメーターが標準)が必要です。
二次的に、「utils.returnluaobject」(すべてのゲームオブジェクトがLua.LuaControllableシリアル化されたフィールドに一意の名前を設定するように要求する「utils.returnluaobject」を使用して、希望するゲームオブジェクトへの参照を取得できます)
そして最後に、 LuaControllable.CheckOperationLegalityを使用してそのオブジェクトにコマンドが許可されているかどうかを確認することができます。このメソッドは、Value System.Reflection.MethodBase.GetCurrentMethod().Nameで呼び出す必要があります。
基本モジュールの1つからのすべての例:
// 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
}