1ヶ月間ピットを踏む
問題の説明
ダウンロード、lua スクリプトの作成、lua スクリプトの検索、ビルド設定で開発ビルドを開く、Use Player Log と Stack Trace を開く、パッケージ化されたファイルで実行中のログを見つけるなど、クライアント側でホット アップデート リソースを完了することができます。内容は以下の通り
LuaException: xlua.access, no field __Hotfix0_Update
stack traceback:
[C]: in field 'access'
[string "Init"]:101: in field 'hotfix'
LuaHotFix:2: in main chunk
[C]: in function 'require'
[string "chunk"]:1: in main chun
上記で報告されたエラーはインジェクションの失敗によるものですが、C# コードを変更するたびに手動でインジェクトすると、コンソールにはインジェクションが成功した、つまり操作中に問題が発生したことが示されます。注射の失敗の原因
クライアント パッケージの問題を解決するには、次の条件を満たす必要があります。
* ホット アップデート スクリプトにタグを付ける必要があります
* タグを付けるには 3 つの方法があります
1. タグ
* [LuaCallCSharp]
2. 静的リスト
* 直接タグを付けることができないクラスを解決するために使用されます
[LuaCallCSharp]
public static List<Type> mymodule_lua_call_cs_list = new List<Type>()
{
typeof(GameObject),
typeof(Dictionary<string, int>),
};
3.動的リスト
[Hotfix]
public static List<Type> by_property
{
get
{
return (from type in Assembly.Load("Assembly-CSharp").GetTypes()
where type.Namespace == "XXXX"
select type).ToList();
}
}
※EditorファイルにXLuaBuildProcessorを作成し、コードを追加
※xLuaのインジェクション成功後に再度コンパイルが起動し、インジェクション結果が上書きされてバグが発生する問題を解決するためのものです
class XLuaBuildProcessor : IPostBuildPlayerScriptDLLs
{
public int callbackOrder
{
get
{
return 0;
}
}
public void OnPostBuildPlayerScriptDLLs(BuildReport report)
{
string dir = string.Empty;
foreach (var item in report.files)
{
if (item.path.Contains("Assembly-CSharp.dll"))
{
dir = item.path.Replace("Assembly-CSharp.dll", "");
}
}
Hotfix.HotfixInject(dir);
}
}
※その後は正常に実行、パッケージングが可能で、動作ログにエラーはありません