Unity3D LuaComponent(基于ulua)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Unity3D LuaComponent(基于ulua),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3376字,纯文字阅读大概需要5分钟。
内容图文
![Unity3D LuaComponent(基于ulua)](/upload/InfoBanner/zyjiaocheng/1155/e510b2f94c924addb47dd8257c4dabd0.jpg)
LuaComponent可以支持配一个需要执行在这个gameObject上的lua脚本,并且每个gameObject上的lua都是一个实例
using UnityEngine; using LuaInterface; using System.Collections.Generic; // Lua组件 public class LuaComponent : MonoBehaviour { // lua环境,需要在使用前给其赋值 public static LuaState s_luaState; // 函数名字定义 protected static class FuncName { public static readonly string Awake = "Awake"; publicstaticreadonlystring OnEnable = "OnEnable"; publicstaticreadonlystring Start = "Start"; publicstaticreadonlystring Update = "Update"; publicstaticreadonlystring OnDisable = "OnDisable"; publicstaticreadonlystring OnDestroy = "OnDestroy"; }; //lua路径,不用填缀名,可以是bundle [Tooltip("script path")] publicstring LuaPath; //预存函数提高效率protected Dictionary<string, LuaFunction> mDictFunc = new Dictionary<string, LuaFunction>(); //lua表,当gameObject销毁时要释放private LuaTable mSelfTable = null; //初始化函数,可以被重写,已添加其他protectedvirtualbool Init() { if (string.IsNullOrEmpty(LuaPath)) { returnfalse; } object[] luaRet = s_luaState.DoFile(LuaPath); if (luaRet == null || luaRet.Length < 1) { Debug.LogError("Lua must return a table " + LuaPath); returnfalse; } mSelfTable = luaRet[0] as LuaTable; if (null == mSelfTable) { Debug.LogError("null == luaTable " + LuaPath); returnfalse; } AddFunc(FuncName.Awake); AddFunc(FuncName.OnEnable); AddFunc(FuncName.Start); AddFunc(FuncName.Update); AddFunc(FuncName.OnDisable); AddFunc(FuncName.OnDestroy); returntrue; } //保存函数protectedbool AddFunc(string name) { var func = mSelfTable.GetLuaFunction(name); if (null == func) { returnfalse; } mDictFunc.Add(name, func); returntrue; } //调用函数protectedvoid CallLuaFunction(string name, paramsobject[] args) { LuaFunction func = null; if (mDictFunc.TryGetValue(name, out func)) { func.BeginPCall(); foreach (var o in args) { func.Push(o); } func.PCall(); func.EndPCall(); } } void Awake() { Init(); CallLuaFunction(FuncName.Awake,mSelfTable,gameObject); } void OnEnable() { CallLuaFunction(FuncName.OnEnable, mSelfTable, gameObject); } void Start() { CallLuaFunction(FuncName.Start, mSelfTable, gameObject); } void Update() { CallLuaFunction(FuncName.Update, mSelfTable, gameObject); } void OnDisable() { CallLuaFunction(FuncName.OnDisable, mSelfTable, gameObject); } void OnDestroy() { CallLuaFunction(FuncName.OnDestroy, mSelfTable, gameObject); //记得释放资源foreach (var pair in mDictFunc) { pair.Value.Dispose(); } mDictFunc.Clear(); if (null != mSelfTable) { mSelfTable.Dispose(); mSelfTable = null; } } }
lua脚本形如,记得最后一定要return 这个表 而且每个变量都得是local的
local Player = {} local transform = nil; local characterController = nil; local moveDirection = Vector3.zero; function Player:Awake(gameObject) print("Awake"); transform = gameObject.transform; characterController = gameObject:GetComponent(‘CharacterController‘); endfunction Player:Start( gameObject ) print("Start") --gameObject.transform.localPosition = Vector3.New(200,100);endfunction Player:OnDestroy( gameObject ) print("OnDestroy") endfunction Player:Update(gameObject) if (characterController.isGrounded) then moveDirection = Vector3.New(Input.GetAxis("Horizontal"), 0, 0); moveDirection = transform:TransformDirection(moveDirection); moveDirection = moveDirection * 6; end-- Apply gravity moveDirection.y =moveDirection.y- 20 * Time.deltaTime; characterController:Move(moveDirection * Time.deltaTime); endreturn Player;
原文:http://www.cnblogs.com/mrblue/p/5588615.html
内容总结
以上是互联网集市为您收集整理的Unity3D LuaComponent(基于ulua)全部内容,希望文章能够帮你解决Unity3D LuaComponent(基于ulua)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。