热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Unity热更新]tolua#&LuaFramework(五):.proto转换为.lua

这次介绍一下在LuaFramework中,将.proto文件转化为.lua文件的步骤1.Python的下载与安装下载:https:www.python.orgdownloads(推荐选择

这次介绍一下在LuaFramework中,将.proto文件转化为.lua文件的步骤


1.Python的下载与安装

下载:https://www.python.org/downloads/   (推荐选择2.x版本)

安装:http://www.runoob.com/python/python-install.html


2.下载protoc-gen-lua.zip并解压到d盘:http://pan.baidu.com/s/1eSyMki2

3.下载protobuf-2.5.0.zip并解压到d盘:http://pan.baidu.com/s/1nuIA1YT

因为框架的关系要放在d盘,当然也可以放在自定义路径,这样就需要修改框架中的源码,默认就好;如果使用的是VS2013,那么推荐protobuf的版本要在2.5.0以上,否则会报很多错误!


4.找到D:\protobuf-2.5.0\vsprojects,然后双击protobuf.sln打开,菜单栏生成/ 生成解决方案,进行编译,期间会报一些错误:

a.min找不到标识符

解决:在错误的文件里加上#include "minmax.h"

b.如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用 /FS

解决:

打开项目的“属性页”对话框,选择 C/C++ 文件夹,选择“命令行”属性页,修改“其它选项”属性以包括/FS,然后选择“确定”。


右击项目 --> "属性”
1. “C/C++” --> "常规” -->”调试信息格式” 设置为 “C7 兼容(/Z7)”
2. “C/C++” --> "代码生成” -->”启用字符串池” 设置为 “是(/GF)”


c.cannot open file ' ?.obj'

解决:把debug目录删掉


那么,如无意外,生成时就不会报错了。


5.

命令行cmd,定位到D:\protobuf-2.5.0\python,然后执行python setup.py build,如果成功的话,就会这样:


然后执行python setup.py install,如果成功的话,最后会看到:



6.打开unity工程,先把Assets\LuaFramework\Lua\3rd\pblua中的login_pb.lua移动到别的地方,以便观察结果。找到Packager类中的BuildProtobufFile方法,修改一下路径:

    [MenuItem("LuaFramework/Build Protobuf-lua-gen File")]
public static void BuildProtobufFile()
{
if (!AppConst.ExampleMode)
{
Debugger.LogError("若使用编码Protobuf-lua-gen功能,需要自己配置外部环境!!");
return;
}
string dir = AppDataPath + "/LuaFramework/Lua/3rd/pblua";
//UnityEngine.Debug.Log(dir);
paths.Clear(); files.Clear(); Recursive(dir);

string protoc = "d:/protobuf-2.5.0/src/protoc.exe";
string protoc_gen_dir = "\"d:/protoc-gen-lua/plugin/protoc-gen-lua.bat\"";

foreach (string f in files)
{
string name = Path.GetFileName(f);
string ext = Path.GetExtension(f);
//UnityEngine.Debug.Log(name + " " + ext);
if (!ext.Equals(".proto")) continue;

ProcessStartInfo info = new ProcessStartInfo();
info.FileName = protoc;
info.Arguments = " --lua_out=./ --plugin=protoc-gen-lua=" + protoc_gen_dir + " " + name;
info.WindowStyle = ProcessWindowStyle.Hidden;
info.UseShellExecute = true;
info.WorkingDirectory = dir;
info.ErrorDialog = true;
Util.Log(info.FileName + " " + info.Arguments);

Process pro = Process.Start(info);
pro.WaitForExit();
}
AssetDatabase.Refresh();
}


关于Process & ProcessStartInfo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace TestProcess
{
class Program
{
static void Main(string[] args)
{
//使用IE浏览器打开百度
Process process = new Process();
process.StartInfo.FileName = "iexplore.exe";
process.StartInfo.Arguments = "http://www.baidu.com";
process.Start();

//打开D盘
ProcessStartInfo processStartInfo = new ProcessStartInfo("");
processStartInfo.FileName = "explorer.exe";
processStartInfo.Arguments = @"D:\";
Process.Start(processStartInfo);

//string fileName
Process.Start(@"D:\Program Files\QQ\Bin\QQ.exe");
//string fileName, string arguments
Process.Start("explorer.exe", @"D:\Program Files\QQ\gf-config.xml");
}
}
}


点击菜单栏LuaFramework/Build Protobuf-lua-gen File,如无意外,应该会看到:


那么把D:\protobuf-2.5.0\vsprojects\Debug中的protoc.exe复制过去即可,再次点击,就会看到Assets\LuaFramework\Lua\3rd\pblua多了一个login_pb.lua,而且跟框架之前那个是一样的!上面的代码中,info.Arguments = " --lua_out=./,意思就是将生成的.lua放到当前目录,而这个当前目录,是根据info.WorkingDirectory而定的。


这个环境搭建花了我一天的时间了,弄得身心疲惫,果然是一个体力活啊!不过总算成功了,付出的没有白费!此时的我,高兴得手舞足蹈啊!


推荐阅读
  • 本次考试于2016年10月25日上午7:50至11:15举行,主要涉及数学专题,特别是斐波那契数列的性质及其在编程中的应用。本文将详细解析考试中的题目,并提供解题思路和代码实现。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
    本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • 在现代Web应用中,当用户滚动到页面底部时,自动加载更多内容的功能变得越来越普遍。这种无刷新加载技术不仅提升了用户体验,还优化了页面性能。本文将探讨如何实现这一功能,并介绍一些实际应用案例。 ... [详细]
  • Hybrid 应用的后台接口与管理界面优化
    本文探讨了如何通过优化 Hybrid 应用的后台接口和管理界面,提升用户体验。特别是在首次加载 H5 页面时,为了减少用户等待时间和流量消耗,介绍了离线资源包的管理和分发机制。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
author-avatar
wangyongjieyexuying677
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有