找回密码
 立即注册
查看: 290|回复: 0

c#调用XLua

[复制链接]
发表于 2021-8-13 12:22 | 显示全部楼层 |阅读模式
项目结束,目前无事,家中老人甚是思念,已经思考准备回京,不准备继续留沪了,也坚持到项目结束了,虽然还没上线,不过该做的也都做了,百善孝为先,架不住老人连续一年多的思念,准备离职了,点开到这个公司的第一篇文档,思绪万千,想起当年还在实习的时候,写的C#连接XLUA的文档,发出来玩玩,
  1. using System;
  2. using System.IO;
  3. using UnityEngine;
  4. using XLua;
  5. using System.Text;
  6. public class GameStart : MonoBehaviour
  7. {
  8.     //更改可识别文件后缀文件后缀,这样文件的后缀名就可以直接写成.lua,不必写成.txt了
  9.     byte[] CustomLoader(ref string fileName)
  10.     {
  11.         fileName = fileName.Replace(".", "/");
  12.         string luapath = Application.dataPath + "/LuaSource/" + fileName + ".lua";
  13.         string strLuaContent = File.ReadAllText(luapath);
  14.         byte[] result = Encoding.UTF8.GetBytes(strLuaContent);
  15.         return result;
  16.     }
  17.     public LuaEnv luaEnv;
  18.     private LuaTable scriptEnv;
  19.     private Action luaStart;
  20.     private Action luaUpdate;
  21.     private Action<Collider> luaOnTriggerEnter; //触发
  22.     private Action<Collision> luaOnCollisionEnter;  //碰撞
  23.     private Action luaOnDestroy;
  24.     internal static float lastGCTime = 0;
  25.     internal const float GCInterval = 1;
  26.     void Awake()
  27.     {
  28.         luaEnv = new LuaEnv();
  29.         scriptEnv = luaEnv.NewTable();
  30.         LuaTable meta = luaEnv.NewTable();
  31.         meta.Set("__index", luaEnv.Global);
  32.         scriptEnv.SetMetaTable(meta);
  33.         meta.Dispose();
  34.         scriptEnv.Set("self", this);
  35.         luaEnv.AddLoader(CustomLoader);
  36.         luaEnv.AddBuildin("rapidjson", XLua.LuaDLL.Lua.LoadRapidJson); //读取json
  37.         luaEnv.DoString("require('main')", "GameStart", scriptEnv);
  38.         scriptEnv.Get("Start", out luaStart);
  39.         scriptEnv.Get("Update", out luaUpdate);
  40.         scriptEnv.Get("OnTriggerEnter", out luaOnTriggerEnter); //触发
  41.         scriptEnv.Get("OnCollisionEnter", out luaOnCollisionEnter); //碰撞
  42.         scriptEnv.Get("OnDestroy", out luaOnDestroy);
  43.     }
  44.     void Start()
  45.     {
  46.         if (luaStart != null)
  47.         {
  48.             luaStart();
  49.         }
  50.     }
  51.     void Update()
  52.     {
  53.         try
  54.         {
  55.             if (luaUpdate != null)
  56.         {
  57.             luaUpdate();
  58.         }
  59.         if (Time.time - GameStart.lastGCTime > GCInterval)
  60.         {
  61.             luaEnv.Tick();
  62.             GameStart.lastGCTime = Time.time;
  63.         }
  64.         }
  65.         catch
  66.         {
  67.            // print("已经没怪了");
  68.         }
  69.     }
  70.     private void OnTriggerEnter(Collider other)
  71.     {
  72.         if (luaOnTriggerEnter != null)
  73.         {
  74.             luaOnTriggerEnter(other);
  75.         }
  76.     }
  77.     private void OnCollisionEnter(Collision collision)
  78.     {
  79.         if (luaOnCollisionEnter != null)
  80.         {
  81.             luaOnCollisionEnter(collision);
  82.         }
  83.     }
  84.     private void OnDestroy()
  85.     {
  86.         if (luaOnDestroy != null)
  87.         {
  88.             luaOnDestroy();
  89.         }
  90.         luaOnCollisionEnter = null;
  91.         luaOnTriggerEnter = null;
  92.         luaUpdate = null;
  93.         luaStart = null;
  94.         luaOnDestroy = null;
  95.         scriptEnv.Dispose();
  96.     }
  97. }
复制代码
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 09:25 , Processed in 0.088276 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表