作者:wangyongjieyexuying677 | 来源:互联网 | 2023-08-04 14:28
这次介绍一下在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而定的。
这个环境搭建花了我一天的时间了,弄得身心疲惫,果然是一个体力活啊!不过总算成功了,付出的没有白费!此时的我,高兴得手舞足蹈啊!