让UE4支持Json嵌套

Tips: 让UE4支持Json嵌套 (How to Support Nested at UE4)

UE4项目开发笔记(三)

开UE4的坑已经五月有余,这五个月里用各种姿势躺过不同的坑,有横着躺的;有竖着躺的;有睁着眼躺的…Orz…
这周躺了一个老坑,此坑在Unity也被蹂躏过一次.(别以为换了皮肤我就不认识你了 ( ╯□╰ ))

0x00. 基础知识

简单唠一句 , UE4在自己的反射机制之上实现的JSON 序列化反序列化 . 并非使用目前主流的任何JSON C++库.(libJson jsoncpp jsonFx rapidjson or other else..)

0x01. 问题再现

项目里几乎所有数据都使用了Json,用户生产的数据使用Json保存,网络请求数据使用Json往返. 由于小伙伴们设计的数据结构实在复杂 , 不免产生各种复杂的结构体 , 例如:

TMap < FString,FString > mapFF;
TMap < FString,TArray < FJsonStruct1 > > mapFTA;
TMap < FString,TMap < FString,FJsonStruct1 > > mapFTM;

以上三种数据变量 ,mapFF 是一个普通的字典变量 , 这个在UE4里是没问题可以正常, 在大多数UE4支持的UPROPERTY变量中 通过 FJsonObjectConverter 序列化和反序列化的.一般的处理方式是这样的:

继续阅读“让UE4支持Json嵌套”

Unity中HTTP请求永远无法完成

Unity项目开发笔记(十六)

目前产品在Unity端的开发任务已经趋于平稳 , 但是依旧达不到”非常稳定”的状态 , 随着用户量的增加 , 在复杂的PC网络和设备环境下 每次迭代版本都会频频中坑,这不 这次中招的是WWW和UnityWebRequest.

0x00. 基础介绍

我们知道现在的Unity (Mono2.0 + .NET 3.5) 在不增加第三方插件的情况下 有三种HTTP请求方式:

  • WWW – 大家都知道,对于PC平台来说 底层封装了一遍Curl
  • UnityWebRequest – Unity5.0以后新出来的一种方式
  • HttpWebRequest – .net 自带的一种网络请求方式

以上三种请求方式各有优劣:

WWW 主要是封装得比较便捷 , 下载AssetBoundle Texture等比较方便 省了转换和加载的过程.
UnityWebRequest 主要是更加接近于 HttpWebRequest ,但是参数设置又比 HttpWebRequest 省事一点,适用于项目的大批量API实现 , 使用UnityWebRequest 可以比较自由的添加各种网络数据传输方式和格式.
HttpWebRequest .net框架自带 ,属于三种方式中自由度最大的 , 但是缺点也很明显 各种参数设置必须了然于胸 .

继续阅读“Unity中HTTP请求永远无法完成”

小番茄助手配置说明

UE4项目开发笔记(二)

UE4大约有500W行的代码,如果UE4项目编码使用VS的话 , VS很多好用的代码快捷功能会有严重的卡顿感.万幸VX插件毫无影响!所以下面简单罗列一下我这十年间使用VX插件的小糖果 (●’◡’●) ,
(没错, 我使用VX已逾十年!)

注: 小番茄助手 = Visual Assist Options

助手官方网站: 传送门
PS 价格: 99刀 一年更新权限 + 单版本永久权限. (推荐)
PPS 其他获取方式自行谷歌

目前这个工具对VS上编码几乎达到了无缝支持 , 下面简单介绍几个如虎添翼的功能:

继续阅读“小番茄助手配置说明”

UE4开发环境配置(入坑第一篇)

UE4项目开发笔记(一)

我们这代人呀
从Flash到cocos,再到Unity 最后入坑UE4 (Unreal Engine4) ;
从页游到跨平台手游再到细分市场;
从ActionScript到C/C++ lua C# Java OC 兜兜转转,最终又回来捣鼓C++;
这不,开始开UE4的坑了.

工欲善其事,必先利其器 , 容我先推荐几个基础设备.

继续阅读“UE4开发环境配置(入坑第一篇)”

西安,晚来了一千年

最近抽出了一个小黄金周(4.5天)去西安走了一遭,天天暴走模式.
西安地处关中平原中部,北濒渭河,南依秦岭,当年的名字更响亮 — 长安
这个季节去最合适,因为刚好是蒲公英纷飞的季节,对于我这种南方人来说 这是一种很少见的光景.

接下来,简单记录一下这次短途旅行的感受.

继续阅读“西安,晚来了一千年”

2017,寻梦环游记

终于又到了这一天,回想过去一年,真是惊心动魄.焦虑依然存在 — 这是一篇毫无逻辑和主题的呢喃

关于生活

带来的焦虑

过去的2017年里,发生了很多的事情.内心的焦虑也愈发严重,关注了一整年的社会热点事件,发现大多数事情都如璀璨烟花,最短数天最长数月之后 就会被曾经多么慷慨激昂慷慨捐款多么愤愤不平的众人遗忘.大家不仅仅不遗忘了事情本身,还遗忘了它带来的教训.当纷扰过后 回归粮食和蔬菜,大家又追着下一个热点去了.最少多关注下粮食和蔬菜会不会比较好 ?
关注了几个极具争议性的事件之后(不是那堆娱乐事件)发现整个局域网里,都容不下敢说话 敢发不同声音的人.在大家认为的”大义凛然”面前,在大家的集体道德观面前,其他一切声音 都被打压得很惨,大家用一种非常不道德的方式(恶言相向 污言碎语)去打压大家不认同的声音.这样只会有一种结局,最后大家都会把东西憋在心里,最后实现共和.多么可怕的未来!

今年想要畅游网络更新困难了,楼梯愈发不稳定,今年花了更多的时间在研究扶梯上.如果说新年要有什么愿望,能畅游世界,就是我的愿望.

继续阅读“2017,寻梦环游记”

iL2CPP下iOS平台的GBK编码

项目开发笔记(十五)

我以为我早已经摸透各种编码,各种开发语言转码早就可以写得666,但是这次填坑真的把人虐得欲罢不能.这次的事情有比较苛刻的前提条件,所以不一定适用于通过搜索找到此文章的各位遇到的类似情况.

先说说项目基本情况:

Client: Unity 5.3.4 (C#开发逻辑,Java OC原生开发支持,iOS下iL2CPP编译模式)
Server: 纯C++开发的服务器,PHP辅助

0x01. 引发的GBK编码问题

这个项目的网络数据的全部中文都是走GBK格式,数据到了客户端在iOS下所有中文均显示乱码.在 PC和Android下正常

关于编码问题有一篇经典文章 – 字符编码笔记:ASCII,Unicode和UTF-8

这个项目是一个超过十年的老项目(我主要负责移动客户端的实现),服务端使用纯c++开发,服务端底层架构和所有模块已经正常运行十年以上.导致遇到很多问题只能是客户端去适应服务端.所以不可能让协调服务端直接修改数据格式.

0x02. 使用I18N.CJK.DLL库

一个被提及最多的GBK格式数据在iOS iL2CPP模式下的转换方案是: 在link.xml中添加配置防止I18N.CJK.DLL被裁剪.配置方式为:

需从Unity安装目录 Editor\Data\Mono\lib\mono\unity 或 Editor\Data\Mono\lib\mono\2.0 两个目录中,拷贝I18N.DLL 和I18N.CJK.DLL到项目目录Asset文件夹下,在Assets根目录下添加link.xml文件,其内容如下:

但是我反复测试,这种方式在我当前的环境下(Unity 5.3.4,iOS,iL2CPP,Mac Pro,iPhone7P)一直是失败的.

继续阅读“iL2CPP下iOS平台的GBK编码”

Jenkins工具的配置和搭建

项目开发笔记(十四)

最近几个月发生很多的事(工作之外),很多很多的事。工作上比较重要的事情还是需要好好记录,接下来说说Jenkins的配置流程(拖了几个月了其实),Jenkins在工作中给予我很大的帮助,到今天为止 Jenkins 已经帮我打包了200+个版本。每打包一个版本就相当于节省我20分钟的人力时间和沟通时间。自从有了Jenkins,我和公司的测试策划基本零交流,什么时候版本出来了一个邮件自动发送到他们的邮箱中。接下来他们爱测不测我不管。

我配置 Jenkins 的基本信息

- 工具信息
Download - https://jenkins.io/
Version - 2.32.2
OS - Win1064 desktop

- 项目信息
version - Unity534
OS - PC/Android/iOS

下载Jenkins的时候请注意有两个版本Long-term Support (LTS)Weekly,我们普通玩家就下载Long-term Support (LTS)即可。

继续阅读“Jenkins工具的配置和搭建”

Unity中如何向Shader传数组

项目开发笔记(十三)

最近使用Shader的时候需要给Shader传递参数,后面发现参数过多(30+个颜色值和10+个纹理),Shader在PC上运行得好好的,但是到某些移动设备上就尿崩,突然发现:

  1. 为什么shader无法往其传递数组呢?
  2. 为什么使用了多个纹理后(例如三星T560),在设备上无法运行正常?

Unity允许通过Material往Shader里传递int,Texture,Color, Vector4等参数,而且不同的移动设备可能支持不同的 Shader Model(SM 1 2 3 4 5),不同的SM版本会限制纹理指令和算术指令的数量使用。参考:High-Level_Shading_Languag。经过测试设备三星T560只能传入8个纹理指令,再增加就会工作不正常。我们不能改变设备显卡对SM的支持,只能通过减少纹理指令和算术指令的方式来兼容它。顺带把如何传入数组的问题也解决了。那怎么做呢?

继续阅读“Unity中如何向Shader传数组”