Unity Xlua の簡潔で明確なホット アップデート チュートリアル (2)

パッチ

次にスクリプトを開きCube、次のように変更します

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;

[Hotfix]
public class Cube : MonoBehaviour
{
    
    
    private Rigidbody rigidbody;
    // Start is called before the first frame update
    void Start()
    {
    
    
        rigidbody = GetComponent<Rigidbody>();
    }

    [LuaCallCSharp]
    // Update is called once per frame
    void Update()
    {
    
    
        if (Input.GetKeyDown(KeyCode.W))
        {
    
    
            rigidbody.AddForce(Vector3.up*200);
        }
    }
}

最初に XLua 名前空間を導入し、次にホット アップデートされるコードに [Hotfix] タグを配置し、ホット アップデートされるコードに [LuaCallCSharp] タグを配置します。 - コードを更新しました。コードを保存して終了します。
この時点では C# コードが変更されているため、 2 つのステップ を実行して再コンパイルする必要があります。その後、Test.lua.txt ファイルを開いて内容を入力し、元の W キーを S キーに変更します。

local UnityEngine=CS.UnityEngine
xlua.hotfix(CS.Cube,'Update',function(self)--热更的脚本名称,需要热更的方法,热更的内容
	--热乎代码块
    if(UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.S)) then
        self.rigidbody:AddForce(UnityEngine.Vector3.up*200);
    end
end)

その後、コード ファイルを保存します。 Unity のコードに戻って実行すると、W キーを押したままにしても機能せず、S キーを押すと立方体が飛び上がってしまいます。

更新リソース、AB パッケージの作成

シーン内に新しい Sphere ゲーム オブジェクトを作成し、そのオブジェクトに Rigidbody コンポーネントを追加してから、Cube スクリプトをオブジェクトに追加します。
ここに画像の説明を挿入します
次に、Sphere ゲーム オブジェクトをプレハブに設定し、Sphere プレハブをクリックすると、[インスペクター] パネルの下部に表示されます。
ここに画像の説明を挿入します
これを次のように変更します。 < a i=4> 次に、 新しいフォルダーを作成し、その中に新しいスクリプトを作成し、AB パッケージをパッケージ化するコードを入力します。
ここに画像の説明を挿入します
EditorCreatAssetBundles

using UnityEditor;
using System.IO;

public class CreatAssetBundles
{
    
    
    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAssetBundles()
    {
    
    
        string dir = "AssetBundles";
        if(!Directory.Exists(dir))//如果该文件夹不存在
        {
    
    
            Directory.CreateDirectory(dir);
        }
        BuildPipeline.BuildAssetBundles(dir,BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);//填写对应的平台
    }
}

ここに画像の説明を挿入します
[Assets] メニューの下に新しいオプションがあり、[Build AssetBundles] をクリックすると、コンソールで「スクリプトにコンパイラ エラーがあったため、プレーヤーの構築中にエラーが発生しました」というエラーが報告されることがわかります。これは、以下の Examples ファイル内の競合によって引き起こされます。 XLua ファイル。次に、フォルダーを削除します。
ここに画像の説明を挿入します
次に、 [生成されたコードをクリア] を選択し
ここに画像の説明を挿入します
、インジェクションを再生成し、[コードの生成] をクリックして、[エディターでのホットフィックス インジェクト] をクリックします。
[アセット] メニューで新しいオプションを見つけ、[アセットバンドルの構築] をクリックします。エラーは報告されていないことがわかりました。
プロジェクトファイルのルートディレクトリを開くと、中にsphere.unity3dのabファイルが生成されていることがわかりました。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_43298513/article/details/134781495