Unity3d游戏项目客户端编辑器实现步骤

客户端编辑器主要的作用是把配置文件(格式是Excel)序列化生成二进制文件,在游戏中进行加载使用。

通过对别的项目的编辑器的学习,了解到一种实现方式:

1.使用Flex生成桌面程序,利用as3xls操作Excel获得数据

2.生成前端的vo.cs和对应的xml,后端文件

3.生成C#的桌面程序

4.加载vo.cs,利用反射生成对应的对象

5.加载xml,把xml的值通过反射设置进对象中

6.通过序列化生成文件

通过这种实现方式,每次生成配置的时候,就需要操作两个工具,个人觉得不如直接使用C#桌面程序读取Excel。

1.生成C#桌面程序

2.使用Oledb读取读取Excel(C#读取Excel有几种方式,百度即可)

3.生成vo.cs文件

4.反射生成vo对象,设值对象

5.序列化

在实现以上步骤的过程中,碰到过了不少问题。

1.使用Oledb读取Excel,要同时考虑到.xls和.xlsx文件:

//2003(Microsoft.Jet.Oledb.4.0)

string strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=‘Excel 8.0;HDR=Yes;IMEX=1;‘", excelFilePath);

//2010(Microsoft.ACE.OLEDB.12.0)

string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=‘Excel 8.0;HDR=Yes;IMEX=1;‘", excelFilePath);

2.创建字符串保存vo.cs文件,然后使用反射根据字符串动态创建对象。

CSharpCodeProvider provider = new CSharpCodeProvidor(); //创建编译器

CompilerParameters paras = new CompilerParameters(); //设置编译参数

paras.ReferenceAssemblies.Add(“System.dll”);

paras.GenerateExecutable = false;  //编译成exe还是dll

paras.GenerateInMemory = true; //是否写入内存,不写入内存就写入磁盘

CompilerResults result = provider.CompileAssembleyFromSource(paras, sourceCode(对象的字符串代码)); //编译代码

Assembly as = result.CompiledAssemble; //获得编译后的程序集

Object obj = as.CreateInstance(“com.game.vo.voName”);

3.通过反射把excel中的值设置进obj

4.把设值好的对象保存进ArrayList当中,对其进行序列化,并保存成 vo.bytes,这里之所以保存成.bytes,是为了在unity中加载(储存文件的扩展名以" .bytes"为结尾的二进制数据。Unity会把它们看成TextAsset来使用。):

public byte[] SerializeBinary(object  request)

{

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

System.IO.MemoryStream  memStream  =  new  System.IO.MemoryStream();

serializer.Serialize(memStream, request);

return  memStream.GetBuffer();

}

5.把生成好的vo.bytes以及vo.cs放到Unity3d项目中

6.使用Unity3d把vo.bytes文件打包成assetBundle文件 (这个步骤是对文件进行压缩,减少文件尺寸)

7.运行Unity3d项目,加载打包好的vo.assetBundle文件,加载成bytes:

string url = "http://www.mywebsite.com/mygame/assetbundles/vo.assetBundle"; IEnumerator Start () { // Start a download of the given URL WWW www = WWW.LoadFromCacheOrDownload (url, 1); // Wait for download to complete yield return www; // Load and retrieve the AssetBundle AssetBundle bundle = www.assetBundle; // Load the TextAsset object TextAsset txt = bundle.Load("myBinaryAsText", typeof(TextAsset)) as TextAsset; // Retrieve the binary data as an array of bytes byte[] bytes = txt.bytes; }

8.反序列化二进制得到配置数据,这里要注意一点就是前面生成的vo.cs文件必须放在com.game.vo目录下,否则反序列化会报找不对vo对象。

public object DeserializeBinary(byte[] buf)

{

System.IO.MemoryStream memStream = new MemoryStream(buf);

memStream.Position = 0;

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserializer =

new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

object newobj = deserializer.Deserialize(memStream);

memStream.Close();

return newobj;

}

9.完成。

时间: 2024-10-18 07:26:01

Unity3d游戏项目客户端编辑器实现步骤的相关文章

Unity3D除了在编辑器里,怎么用代码给一个Texture类型的变量赋值

resource.load上来一张贴图就行. ? 1 2 3 4 5 6 7 8 9 using UnityEngine; using System.Collections; public class example : MonoBehaviour {     void Start() {         GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);         go.renderer.material.mai

CAS客户端服务器端配置步骤

来自我的个人网站:http://lkf.22web.org/ cas介绍: CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目.CAS 具有以下特点: 开源的企业级单点登录解决方案. CAS Server 为需要独立部署的 Web 应用. 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPorta

Unity3D动画面板编辑器状态属性对照表

不推荐用AnimationUtility.SetEditorCurve问题很多,推荐AnimationCurve.AddKey.通过AnimationUtility.GetAllCurves可以获得编辑器状态的动画属性. GameObject m_IsActive Transform m_LocalPosition.x m_LocalPosition.y m_LocalPosition.z m_LocalScale.x m_LocalScale.y m_LocalScale.z m_LocalR

ASP.NET网站使用Kindeditor富文本编辑器配置步骤

1. 下载编辑器 下载 KindEditor 最新版本,下载页面: http://www.kindsoft.net/down.php 2. 部署编辑器 解压 kindeditor-x.x.x.zip 文件,将editor文件夹复制到web目录下  3.在网页中加入(ValidateRequest="false") 1 <%@ Page Language="C#" AutoEventWireup="true" ValidateRequest=

VS2017做为Unity3D的脚本编辑器需要的最精简组件

前言 使用VS2017做为Unity的脚本编辑器,需要的最精简组件. 我的测试环境 windows 10 x64 windows 7 x64 sp1 时间:2017-4-22 最精简的组件 只需要三个必需组件,这些组件都是可选安装位置 C#和Visual Basic Roslyn编译器 静态分析工具 Visual Studio Tools For Unity(我是从vs的插件库中下载的) 在线安装 1.从官网下载对应的版本,文件格式如下:vs_enterprise__2144843982.146

rocketmq的windows版客户端的启动步骤

一.下载RocketMQ首先,我们去下载RocketMQ,RocketMQ 是一个开源的东西,可以去github上面下载,地址是:https://github.com/alibaba/RocketMQ/releases 进去之后,我们会看到很多版本,目前最新的是v3.2.6,也是阿里天池大数据中间件比赛的版本,在window下,我们就直接下载编译好了的版本,就可以了. 也就是:alibaba-rocketmq-3.2.6.tar.gz下载之后直接解压:我们会看到一个alibaba-rocketm

unity3D打包发布Apk详细步骤

1.复制android-sdk-windows文件夹到C盘或者D盘或者你可以找到的任意盘任意目录,注意:不能在中文目录下!! 复制完成之后,打开unity,新建一个项目,打开Edit-Preferences选项. 2.SDK地址:点击Browse,找到刚刚复制的android-sdk-windows文件夹所在的路径,然后点击选择文件夹如右图所示.       3.JDK地址:点击Browse,找到JDK安装的文件夹所在的路径(C:\Program Files\Java\jdk1.8.0_131)

利于Wininet创建一个FTP客户端的步骤

Wininet是Win32关于网络的API,MFC也有对于Wininet的封装,可以利用这组API实现FTP和HTTP通信. Wininet API的头文件:Wininet.下面是Wininet建立FTP客户端的一般步骤.第一步:初始话Wininet,实际上就是设置一些关于是否使用代理,访问方式等的参数.第二步:建立一个FTP链接.第三步:操作ftp服务器上的文件.第四步:关闭各种句柄. 作用 函数原型 说明 初始Wininet函数 HINTERNET InternetOpen( LPCTSTR

Unity3D游戏开发之从Unity3D项目版本号控制说起

??各位朋友.大家好.欢迎大家关注我的博客,我是秦元培,我的独立博客地址是http://qinyuanpei.com.CSDN博客地址是http://blog.csdn.net/qinyuanpei. 今天我想和大家聊聊Unity3D游戏项目的版本号控制. 1.为什么要进行版本号控制? ??当我一个人写代码的时候,在我的脑海中是不存在版本号控制这个概念的.由于我对整个项目的代码如数家珍. 但是当我和一群人在一起写代码的时候.我可能并不会清楚团队中有谁改动了哪一行代码,即使是一个变量的名称或者是一