配置https和ssh+key登陆

博客很久没捣鼓了 , 全网https时代口号都喊了那么多年 .今天花点时间响应一下 “号召” .

vps仅使用ssh+key登陆

每次查看登陆日志 , 就发现vps每天收到几百次匿名登陆请求 , 虽然无伤大雅 但是看到也烦 . 干脆禁止掉账号密码 改为密钥登陆好了. linux系的服务器修改为密钥登陆非常简单:

0x00.生成ssh密钥

win下随便使用cygwin或者openssh , 或者任意一台mac 或者 ubutun桌面系统里 执行如下命令:

ssh-keygen -t rsa

如果一切按默认参数的情况下 应该能生成两个文件:

id_rsa (密钥) id_rsa.pub (公钥)

这两个文件文件一般在 C:\Users\xxx.ssh , 或者 ~/.ssh/ , 请保存好这两个钥匙文件. 保存到不会被误删的地方.

继续阅读“配置https和ssh+key登陆”

C#中使用SHBrowseForFolder导出中文文件夹

Unity项目开发笔记(十七)

从业以来,数次踩中编码的坑, 这次又马失前蹄 , 真是事不过三此非彼白.

本来这个小问题不打算拿出来说 , 但是翻看谷歌发现若干年前也有寥寥数人遇到碰到这个问题 ,而且都并没有给出一个可行的解决方案 ,现在问题依然挂在CSDN等地方 , 似乎不会再有人去回答了, 或者其实题主们后面解决了但并没有回头来提供解决方案. 现在由我来”终结此贴”

0x00.使用SHBrowseForFolder选择文件夹

(大段代码来袭 , 不想看可直接拉到底看关键的几行)

底层接口 – 选择文件夹相关

继续阅读“C#中使用SHBrowseForFolder导出中文文件夹”

让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开发环境配置(入坑第一篇)”

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传数组”