国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Unity框架】XLua中Lua代碼注入C#代碼操作

這篇具有很好參考價值的文章主要介紹了【Unity框架】XLua中Lua代碼注入C#代碼操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、干凈的基于XLua的框架下載地址

1.游戲框架下載地址:https://github.com/kof123w/gitWorkSpace/tree/main/XLua
2.XLua官方與教程地址:https://github.com/Tencent/xLua

二、使用步驟

1.操作步驟

I.宏定義:添加 HOTFIX_ENABLE 到 Edit > Project Settings > Player > Other Settings > Scripting Define Symbols

II.生成代碼:執(zhí)行 ‘XLua > Generate Code’ 菜單,等待Unity編譯完成

III.注入:執(zhí)行 ‘XLua > Hotfix Inject In Editor’ 菜單。注入成功會打印 ‘hotfix inject finish!’ 或者 ‘had injected!’

注意)unity2021.3的版本布局以及被修改了,Scripting Define Symbols菜單在下圖這里:
【Unity框架】XLua中Lua代碼注入C#代碼操作

2.腳本添加

1.在游戲邏輯代碼文件夾創(chuàng)建腳本HotFixTest.cs:

這里需要說明以下,所有我們需要對C#代碼的類進行Lua代碼注入的時候都需要給對應(yīng)的類添加一個[Hotfix]的特性,對應(yīng)的需要進行Lua代碼注入方法需要添加特性[LuaCallSharp],如以下代碼所示:

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

[Hotfix]
public class HotFixTest : MonoBehaviour
{
    void Start()
    {
        hotFixTest();
    } 

    [LuaCallCSharp]
    public void hotFixTest()
    {
        Debug.Log("我是C#代碼的輸出");
    }

    void OnGUI()
    {
        if (GUI.Button(new Rect(10, 10, 300, 80), "Hotfix"))
        {
            LuaManager.Instance.GetLuaEnv().DoString(@"hotFixTest.hotHotFixTest()");
            hotFixTest();
        } 
    } 
}

2.在游戲腳本管理代碼文件夾創(chuàng)建腳本HotFixTest.cs:

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

public class CSharpManager:UnitySingleton<CSharpManager>
{
    private GameObject mainCamera; 

    public override void Awake()
    {
        //父類單例管理
        base.Awake();

        //初始化攝像機
        initCamera();

        //子類擴展添加腳本注冊
        this.gameObject.AddComponent<HotFixTest>();
    }

    /// <summary>
    /// 初始化攝像機
    /// </summary>
    private void initCamera() {
        GameObject go = new GameObject();
        go.AddComponent<Camera>();
        go.AddComponent<AudioListener>();
        go.name = "mainCamera";
        mainCamera = go;
    }

    /// <summary>
    /// 外界獲取攝像機代碼
    /// </summary> 
    public Camera GetMainCamera() {
        return mainCamera.GetComponent<Camera>();
    }
}

3.在游戲啟動腳本中對CSharpManager.cs進行初始化:

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

public class GameStarter : UnitySingleton<GameStarter>
{
    public override void Awake()
    {
        base.Awake();

        //初始化游戲框架
        this.gameObject.AddComponent<LuaManager>();
        this.gameObject.AddComponent<CSharpManager>();
        //資源管理于初始化 
    }

    private void Start()
    {
        //進入游戲
        this.StartCoroutine(this.GameStart()); 
    }


    /// <summary>
    /// 檢查熱更新攜程
    /// </summary> 
    IEnumerator checkHotUpdate() {
        yield return 0;
    }

    IEnumerator GameStart() {
        yield return this.StartCoroutine(this.checkHotUpdate());

        //進入Lua虛擬機代碼,運行l(wèi)ua代碼 
        LuaManager.Instance.runLuaScript();
    }
}

4.在Lua腳本的游戲邏輯下添加一個HotFixTest.lua腳本:

hotFixTest = {}

hotFixTest.hotHotFixTest = function()
   --參數(shù)1為對應(yīng)的ccharp類,參數(shù)2為對應(yīng)的方法名,參數(shù)3為修改后的函數(shù)體
   xlua.hotfix(CS.HotFixTest,'hotFixTest',function(self)
       print("我是lua打印出來的")
   end)
end

--這里主要釋放掉修改的方法的注入
hotFixTest.disposeHotFixTest = function()
   xlua.hotfix(CS.HotFixTest,'hotFixTest',nil) 
end

5.還需要再Lua腳本的Main.lua腳本中添加對HotFixTest.lua的請求和初始化


main = {}

main.awake = function()
    print("this mian awake function");
end


main.update = function()
   print("this mian update  function")
end

require('Game/HotFixTest')  --初始化HotFixTest.lua腳本

三、運行結(jié)構(gòu)

1.按鈕沒有點擊前:

【Unity框架】XLua中Lua代碼注入C#代碼操作

2.按鈕點擊之后

【Unity框架】XLua中Lua代碼注入C#代碼操作

二、源碼下載地址

https://github.com/kof123w/gitWorkSpace/tree/main/XLua文章來源地址http://www.zghlxwxcb.cn/news/detail-479775.html

到了這里,關(guān)于【Unity框架】XLua中Lua代碼注入C#代碼操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 使用XLua在Unity中獲取lua全局變量和函數(shù)

    使用XLua在Unity中獲取lua全局變量和函數(shù)

    1、Lua腳本? 入口腳本 測試腳本 2、C#腳本 (1)獲取全局變量 執(zhí)行結(jié)果 (2)獲取全局函數(shù)

    2024年02月07日
    瀏覽(22)
  • Unity中如何使用Rider調(diào)試C#和lua代碼

    Unity中如何使用Rider調(diào)試C#和lua代碼

    工作中經(jīng)常需要調(diào)試lua代碼,之前使用VS調(diào)試C#代碼,使用Intellij Idea來調(diào)試lua代碼,這樣其實比較麻煩,所以查了一下,可以直接使用Rider來統(tǒng)一的調(diào)試C#和lua代碼 Rider下載:Rider官網(wǎng)下載,根據(jù)需要選擇對應(yīng)的版本,建議使用Rider2020.1.0,參考鏈接 打開Unity,在preference中設(shè)置為

    2023年04月13日
    瀏覽(25)
  • 關(guān)于Unity在Xlua調(diào)用Lua腳本函數(shù)時報錯This type must add to CSharpCallLua 解決辦法

    使用委托來獲取xlua中的function是不行的 報錯腳本示范 即使全部接口打好標簽并且在編輯器中把兼容等級改為4.X 打包出去還是會出問題 建議在lua腳本中建立一個空的table 再把方法塞進去 比如 然后在c#端 就可以正常運作這個方法了

    2024年02月12日
    瀏覽(26)
  • [游戲開發(fā)][Unity] Xlua與C#互相調(diào)用規(guī)則

    [游戲開發(fā)][Unity] Xlua與C#互相調(diào)用規(guī)則

    靜態(tài)方法無需獲取類對象,獲取到類直接執(zhí)行 例1: 例2 調(diào)用非靜態(tài)方法一定要獲取到具體的C#類對象?。?! 例1:獲取單例對象并調(diào)用非靜態(tài)方法,Singleton是單例的一種寫法,網(wǎng)上源碼很多 下面是Lua調(diào)用C#的代碼,我這是模擬Xlua的工程,以類的方式實現(xiàn)交互 看Log日志發(fā)現(xiàn):

    2024年02月07日
    瀏覽(33)
  • XLua中l(wèi)ua讀寫cs對象的原理

    XLua在C#維護了兩個數(shù)據(jù)結(jié)構(gòu),ObjectPool和ReverseMap。 首次傳遞一個C#對象obj到Lua時,對象被加入到ObjectPool中,并為它創(chuàng)建一個唯一標識objId,建立obj和objId的雙向映射。 如果該對象的類型是第一次傳到Lua,還會為類型創(chuàng)建一個元表typeMetatable。 把typeMetatable注冊到Lua的全局表中,這

    2024年02月08日
    瀏覽(15)
  • 【Lua in Unity】詳解與和C#互相調(diào)用示例

    目錄 Lua在Unity中的主要作用 如何創(chuàng)建 Lua與C#互相調(diào)用 C#和Lua的使用場景區(qū)分 完整示例 游戲邏輯編寫:Lua可以作為一種腳本語言,用于游戲中的邏輯編寫,例如定義游戲角色的行為、AI邏輯,處理游戲的戰(zhàn)斗邏輯和流程控制,等等??梢詫ua代碼通過Unity的API來實現(xiàn)與引擎的交

    2024年02月11日
    瀏覽(31)
  • unity的C#學(xué)習(xí)——不安全代碼(聲明不安全代碼塊:實現(xiàn)C/C++指針的創(chuàng)建與相關(guān)操作)

    不安全代碼(Unsafe code)是指 使用了指針變量的代碼塊 ,或者 執(zhí)行需要訪問非托管代碼(unmanaged code)的操作 。 指針 是一個變量,其值為另一個變量的地址,即內(nèi)存位置的直接地址。在C#中,不安全代碼必須使用 unsafe 修飾符標記,并需要在編譯時啟用 AllowUnsafeCode 選項。

    2024年02月09日
    瀏覽(25)
  • idea調(diào)試unity里面的lua代碼

    idea調(diào)試unity里面的lua代碼

    本人一名java后端開發(fā),看到前端同事調(diào)試lua代碼無腦print,甚為鄙視,百度加實操寫一份調(diào)試unity的lua腳本文檔 1.安裝lua lua官網(wǎng)下載頁面 最終下載頁面 2.idea安裝插件 emmylua 3.idea打開unity的lua腳本 idea-file-open 選擇相應(yīng)目錄 idea-file-project structure-sdks選擇+號 4.配置啟動參數(shù) 5.復(fù)制

    2024年02月10日
    瀏覽(23)
  • VsCode使用EmmyLua插件調(diào)試Unity工程Lua代碼

    VsCode使用EmmyLua插件調(diào)試Unity工程Lua代碼

    一、VSCode安裝EmmyLua ?二、添加配置文件 三、設(shè)置配置文件 執(zhí)行完第二步會彈出添加好的launch.json配置文件,這個文件只需要修改“ideConnectDebugger” = false,其他一般不用修改。 ? ?四、添加Lua斷點調(diào)試入口 luaEnv變量必須為全局唯一 路徑標紅的地方配上你的正確路徑名 var p

    2024年02月13日
    瀏覽(24)
  • XLua框架使用

    1、XLua集成RapidJson與protobuf:跳轉(zhuǎn)鏈接 2、XLua常用庫集成(lua-protobuf、LuaSocket、RapidJson、LPeg):跳轉(zhuǎn)鏈接 3、集成第三方庫常遇到的問題 ? ? ? ? A、mac上sh編譯腳本運行一次后要關(guān)閉命令行窗口,否則有緩存,修改 cmakelist 不生效 ? ? ? ? B、lua-rapidjson git 上排名最前的那個編

    2024年02月11日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包