Win安装Boost

1
2
3
4
打开 Visual Studio 2012 工具命令提示终端,这样VS环境就设置好了,否则在多版本VS下会出很多问题

bootstrap.bat
bjam.exe --toolset=msvc-11.0 install --prefix=E:\work\xbdg\program\dep\boost

Linux安装Boost

编译boost
进入libs/config

1
bash configure

将当前目录生成的user.hpp拷贝到boost/config下,覆盖同名文件

–layout=tagged 生成带-mt的库名,mongo-cxx-driver-legacy-1.0.0需要这种名字的库
-j4 并行编译

1
./b2 --with-chrono --with-date_time --with-regex --with-system --with-thread --build-type=complete --layout=tagged -j4 --prefix=/usr/local threading=multi install

配置boost

配置文件 boost/config/usr.hpp
说明文档:Boost.Config

精简boost

工具bcp

git

windows下配置 ssh 公钥

1. 安装git,从程序目录打开 "Git Bash"
2. 键入命令:ssh-keygen -t rsa -C "github account"
  "github account"是github账号
3. 提醒你输入key的名称,输入如id_rsa
4. 在C:\Documents and Settings\Administrator\下产生两个文件:id_rsa和id_rsa.pub
5. 把4中生成的密钥文件复制到C:\Documents and Settings\Administrator\.ssh\ 目 录下。
6. 用记事本打开id_rsa.pub文件,复制内容,在github.com的网站上到ssh密钥管理页面,添加新公钥,随便取个名字,内容粘贴刚公钥

访问git仓库

  1. git 远程URL只有在使用git协议时才能使用ssh的方式pull push, https是不能使用 ssh的
  2. 使用git访问一下_config.yml中的git仓库地址,如 git clone git@github.com:yangguosdxl/yangguosdxl.github.com.git,应该是不需要密码的,因为有ssh key的配置

    hexo

hexo plugin

markdown

评论

WIN32 准备好boost, python2, scons

boost库最好是从官网下预编译的,自己编的,在编mongoclient的时候可能会出现种问题
mongo-client-install\include\mongo\client\autolib.h 查看要哪个库文件

打开 Visual Studio 2012 工具命令提示终端,这样VS环境就设置好了,否则在多版本VS下会出很多问题

1
2
>scons --prefix=E:\work\xbdg\program\dep\mongo-client-install --sharedclient --dynamic-windows --cpppath=E:\work\xbdg\program\dep\boost_1_57_0 --libpath=E:\work\xbdg\program\dep\boost_1_57_0\lib32-msvc-11.0 --disable-warnings-as-errors --32  --dbg=off --msvc-version
=11.0 install

mongo-client-install\include\mongo\client\autolib.h 查看要哪个库文件

Linux

编译boost
–layout=tagged 生成带-mt的库名,mongo-cxx-driver-legacy-1.0.0需要这种名字的库
-j4 并行编译

1
./b2 --with-chrono --with-date_time --with-regex --with-system --with-thread --build-type=complete --layout=tagged -j4 --prefix=/usr/local threading=multi install

编译mongo-cxx-driver-legacy-1.0.0
只能编动态库,静态库无法使用

1
scons --prefix=/usr/local --disable-warnings-as-errors --64  --dbg=off --ssl -j4 --sharedclient --cpppath=`pwd`/../boost_1_57_0 --libpath=`pwd`/../boost_1_57_0/stage/lib --runtime-library-search-path=`pwd`/../boost_1_57_0/stage/lib install

好像3.0版后认证要用SSL
对于C++11程序要特别注意:
如果程序使用了C++11编译,则该Driver也要用C++11编译,否则就都不要使用C++11编译。
关于C++11

1
2
3
4
5
6
7
ATTENTION FOR C++11 USERS:

If you want to use this driver for a project which gets compiled with c++11 features enabled (-std=c++11), you have to add --c++11 flag to scons, otherwise intialize the driver will crash with segmentation fault (see https://jira.mongodb.org/browse/CXX-458).

I can't enable this flag by default, because your project has to compile with -std=c++11, too. I could create an other package for reflecting this issue, if someone ask for it.

Otherwise current develop-branch of this driver is for c++11 only, but will take some time until it's usable (at least for testing).

多线程安全

安装

Linux

安装pip

安装django

安装mongoengine

uwsgi

安装
命令行参数中文参考

模板

模板是自动转义的,关闭转义

Django模板为了防止XSS,缺省情况下会自动将HTML进行转义。

有的时候我们确实想输出一些含有HTML代码的内容(比如Web编辑器产生的文章内容数据),如何关闭自动转义?
方法1:使用过滤器。

1
|safe

1
{ { data|safe } }

这样data的内容就会原样输出,不会被转义。请确保data中的数据不会产生XSS。
方法2:关闭整段代码的自动转义。

1
2
3
{ % autoescape off % }
{ { data } }
{ % endautoescape % }

转自

时区

时区代码参考
中国上海时区代码:Asia/Shanghai

场景制作

  • 所有相关资源放到Assets下的一个文件夹下,比如Assets/scenes
  • 所有场景对象放到一个对象下
  • 导出成AssetBundle,好在游戏中加载,就算是Demo阶段也应该这么做,因为编辑器本身的导出包功能实在不好用。这也意味着要有编辑器加载场景AssetBundle的功能,好做调试。
  • 场景里要有一个点来确定场景位置

哪些工作应该由美术做

  • 对于要外包的美术资源,能策划做的尽量让策划做,这样就减少了很多要和美术沟通的工作量。

规范

通用

  • 三维软件单位用米制
    保证所有场景和模型都是同一比例与单位就可以了
    具体导出设置见《Unity3D4.x从入门到精通》资源导入部分
  • 同屏面数
  • 目录结构
  • 手机UI分辨率
    1. 定下最佳分辨率,最佳显示手机
    2. 找到实际最佳分辨率:比第一条的分辨率低,但在第一条的分辨率下还是能显示得很清晰
    3. 按实际最佳分辨率做UI,并定义控件大小
    4. 目前NGUI的UIRoot设置为 :
      Scaling Style:Constrained On Mobile(在手机上按比例缩放,在电脑上按像素显示不缩放)
      Content Width 实际最佳分辨率的宽
      Content Height 实际最佳分辨率的高

场景

  • 地表过大时,由于烘焙图大小的限制,会导致烘焙出的阴影质量太差,可以在重要的区域单独使用一块地表
  • T4M不支持5.0
  • 不能大面积使用法线贴
  • 网格与材质合并插件 MeshBaker
  • 移动端水插件MobileOcean
  • 使用3DMax制作场景
    1. 加载到U3D后,要在编辑器加调整Shader,加入水,加入天空盒,加入灯光,烘焙
    2. 优化,如合并Mesh及材质
    3. 地表Collider

角色与动画

  • 同一循环动作的起始位置与终止位置要重合
  • 对于不同动作,如果脚踏地,则踏地高度要一致,以免播放不同动作时,出现角色脚不在地面上的问题
  • 动画导出时不能勾选<烘焙动画>选项,否则根节点会被K上帧
  • 模型FBX导入unity3d后,unity3d是如何决定这个FBX的根节点的?
    1. 如果上图中Toudai,hair,MaWei,cc全在Dummy001节点下,则unity3d从FBX创建GameObject时,根节点就是Dummy001,但根节点名字不叫Dummy001
    2. 如果Toudai,hair, MaWei不在Dummy001下,cc在Dummy001下,则unity3d从FBX创建GameObject时,会自动创建一个全新的节点做为根节点,这个根节和Dummy001没有任何关系
      总结
      • 如果FBX中所有节点都在一个节点A(并且这个节点是虚拟体)下,那么unity3d从FBX创建GameObject时,会以FBX中那个总的根节点作为GameObject的根节点。但如果这个节点A不是虚拟体(如骨骼,网格等),则会创建一个全新的根节点作为GameObject的根节点
      • 如果FBX中所有节点并不都在一个节点下,那么unity3d从FBX创建GameObject时,会自动创建一个全新的根节点作为GameObject的根节点,此根节点和FBX中的节点没有任何关系。
  • ImportFBX Errors: TimeRange (447392) for translation curve(s) on node ‘Bone005’ on take ‘Take 001’ larger than maximum allowed(100000)

  • 在播放动画后,人物旋转值不对。

    1. 人物模型初始旋转值为(0,0,0),此种旋转值下,人物模型应该是正立的
    2. 动画如下,但请注意,该动画是基于(-90,0,0)的旋转值做的
    3. 在人物模型上播放该动画后,出现如下情况:

      分析:
      动画在制作时,是基于根节点有(-90,0,0)的旋转值做的,结果在导入Unity3D后,在人物默认旋转值(0,0,0)下播放出动画后,就会出现人物模型表现出来的旋转不对的问题。

特效

  • 目前特效系统是ParticleSystem

UI

  • NGUI

技能

  • Cinema Director

摄像机动画

  • CameraPath

##

Dynamic Bone

  • 实时骨骼动画,用于制作乳摇,头发甩动,裙摆等
  • 至少在1.1.7之前,都是无法处理Scale为负值的骨骼

热更新脚本语言

ulua/tolua

参考

简介

  • 集成Lua到Unity3D中,用于IOS应用内更新
    -

安装

  • 把msys2安装到最新
  • pacman -S mingw-w64-i686-toolchain

ILRuntime

参考

NGUI

参考

NGUI中深度depth和z轴关系的小试验

  • 目前不支持Unity5的新版Assetbundle打包方式
  • Texture2D原点在左下角

控件

UIScrollView,UIScrollBar 与 UIGrid

  • 由于执行顺序的原因,有时候UIGrid子节点变化后,UIScrollView不能主动察觉到子节点的变化,因而无法更新ScrollBar。解决办法如下:
    1
    2
    3
    UIGrid grid;
    UIScrollView scrollView;
    grid.onReposition = scrollView.ResetPosition()

显示顺序

  • 同一Panel 不论Atlas相不相同,都以深度为准
  • 不同Panel 以Panel深度为准
  • 也可以通过设置UIPanel中

VSTU2012

-5.2没有问题
-4.1.5不能自动检测到VSTU的包,要自己找到安装路径里的VSTU包

曲线与路径

PathMagic

[]

特效

Particle Dynamic Magic 2: Decal, Particle, Spline, AI creation & dynamics

  • 拥有生命的粒子系统

Circular Gravity Force

  • 力场特效

各种奇葩特效,非常炫酷,而且开源

残影

物理

物理头发Hair Tool

物理角色动画PuppetMaster

动画

角色动画编辑器Skele: Character Animation Tools

相机

#快速原型

使用凹凸贴图

Shader

换装

Unity3D 模型换肤技术
Unity里的人物驱动/换装备/换武器/换衣服/动画重定位
换装demo时美术遇到的问题详解

挂点

这是为了应付不同模型同一装备要挂在不同位置而提出的解决方法。如果整个工程只能一个角色模型,那也就只用固定的挂点了,而程序也不用知道这个挂点在哪,用默认的就行了。
unity中武器替换的注意点

刀光

Melee Weapon Trail–Unity刀光插件分享

着色器

Unity5 中基於物理的著色器
基于物理着色(PBS)的材质系统
Unity3d 如何找到游戏对象并改变其颜色

地形

IClone地形编辑器结合T4M插件在Unity3D使用
iClone
视频: iClone動畫教學12地形轉換
t4m
Object2Terrain

图像特效

Mobile相关

MAKING YOUR MOBILE GAME A SUCCESS. PART ONE: F2P GAME DESIGN

MAKING YOUR MOBILE GAME A SUCCESS. PART TWO: THE PREMIUM OPTION

MAKING YOUR MOBILE GAME A SUCCESS. PART THREE: ACQUIRING USERS

unity3d blog about mobile

UNITY 4: AAA GRAPHICS AND PERFORMANCE FOR YOUR MOBILE GAMES

UNITY HARDWARE STATISTICS

Asset store

  • 下载目录:C:\Users\Administrator\AppData\Roaming\Unity\Asset Store

Mecanim动画

  • 连续两次调用CrossFade,则后一次的CrossFade不会替换前一个,而是会丢失
  • 根动画
    1 如果是Human自动就设置好了,只要启用Animator的Apply root motion就可以了
    2 如果是Generic
    a 设置模型骨骼的根节点,bip骨骼一般是Bip 001
    b 动画的Rig->Avatar Definition选择Copy From Other Avatar,Rig->Source选择对应骨骼的Avatar(也可以选择Create From This Model,然后设置根骨骼为Bip 001)
    c 查看动画的面向是否正确,不正确则Aniamtions->Root Transform Rotation->Based Upon(at Start)选择Original
    
  • 表情动画
    普通的哭笑等动画做一帧就可以了,不过Max里要做成两帧,不然Max导不出动画
    导出FBX时,MAX用Morpha做的表情动画要同时导出变形器所在的模型,如果模型有蒙皮则还要带上蒙皮
    1 Avatar Mask要选择对应的骨骼类型,对于Generic类型骨骼,如果想屏蔽某个骨骼,不勾选对应的骨骼Transform就行了
    2 动画类型选择与骨骼对应的类型
    3 把表情动画加到AniamtorController里对应的Layer下,Layer设置好Avatar Mask,调整好权重
  • 在Animator所在GameObject隐藏后再显示出来,激活的动画会变成默认动画,而不是上一个动画。
  • 立即播放动画到某一时刻
    1
    2
    3
    animator.Play(animState)
    animator.Update(0)
    animator.Update(time)

场景加载

  • LoadLevel 会加载场景的环境配置,也就是RenderSettings里的参数,包括天空盒,而LoadLevelAdditive则不会
  • 5.0到5.1,Android版场景Assetbundle在编辑器下无法正确加载,但是真机下是正常的。而Webplayer版的AB在Android平台的编辑器里是可以正常加载的,但在真机里是无法加载的。
  • Android下PlayerSettings/Graphics Level要设置为Force OpenGLES2.0,否则加载场景Assetbundle后,会无法显示天空盒,所有Shader也会不正常。

    杂项

刚体与受力

  • 刚体要连续受力,才会有受力表现,也就是在Update里连续调用受力接口。并且一个物体上所有刚体都受力才会有受力表现。

一些限制

  • 一个模型最多65535个顶点,超过此数量的模型在运行时将被Unity自动分割为多个模型

图形性能分析

  • 面数 Batches
  • 最影响效率的是角色
  • 面数高并不可怕,可怕是Batch多
  • 如果发现渲染性能有问题,可以用排除法,就是把场景里的东西一点一点删掉,看看是什么影响了性能。

Android

  • apk本身是一个压缩包,不能用普通文件系统的API来存取,可以用WWW和Zip API来读取。
  • 使用WWW来读取本地文件时要加file://前缀
  • 首选项Player->Write Access要设置成External(SDCard)才能对Application.persistentDataPath进行写操作,此时该目录为/Android/data/包名/files/(此目录可写),否则是/data/data/包名(此目录不可写)

打包相关

  • 有依赖的AssetBundle(简称AB),只有所有依赖的AB都在内存(不用加载AB内对象)才能加载此AB内的资源,否则可能引起崩溃,已知的一种崩溃原因是:加载的对象带有Animator组件,在克隆该对象时会崩溃
  • 5.0-5.3,在使用LoadLevelAsync加载场景AB包时,会出现无法正确加载光照图的BUG,目前的解决方式是将场景打包为Prefab,手动加载光照图
  • FBX的压缩比大概在10%-20%之间

2015 Mobile图形限制

  • 场景7万面,同屏40-60批次,包括灯光,水,粒子
  • 精细模型1万面,133根骨骼
  • UI支持最大分辨率1920X1080,实际制作缩小为0.625倍

图片质量

  1. filter,采样算法
    • point(no filter) 不过滤,可能会出算边缘锯齿,但类似2x2 1x1的小图片要用这种,其它过滤算法使用小图边缘不是纯色,而是从中间深色过渡到边缘颜色。
      -

FAQ

  • 5.0-5.1 SampleAnimation 在Android下都会崩溃
  • 为什么在没有LOD,可见页数不变的情况下,物体离摄像机越远,帧率越高?
  • 如何计算图片所占用的内存数量?
  • 为什么同材质的不同粒子发射器会在运行时合并批次?动态合并已关闭。
  • 使用同样材质的多个粒子发射器只会占用一个批次?
  • 透明贴图有几种方法?
    1. Alpha通道
    2. 图片本身背景填充色不是100%
    3. 自定义Shader,以某种颜色作为Alpha值
  • GameObject references runtime script in scene file. Fixing!
    出现这种错误首先Reimport All试试
  • 运行时显示Unable to find shaders used for the terrain engine. Please include Nature/Terrain/Diffuse shader in Graphics settings.
    5.0以后要包含三个Shader
    Nature/Terrain/Standard (Only adding this solved the same problem for me)
    Nature/Terrain/Diffuse
    Nature/Terrain/Specular
  • Texture2D.ReadPixels() 在Windows与Editor下是以左上角为原点,在Android下是以右下角为原点
  • 工程画质的设置(Quality)会影响到图片压缩的质量,网格的平滑程度
  • 美术工程与客户端工程是两个不同的工程时,美术工程编译出来的Assetbundle在某些情况下,在客户端加载了AB后可能会出现无法加载Shader的情况。
    可能的原因:
    1. 美术工程的配置文件不正确,如果下三个配置文件之一或全部可能引起该问题:
      MissDiffuseShader
  • 运行时Transform的参数不能设置了
    可参原因:
    1. Animator的Controller中有的动画对根节点K帧了,不论这个动画是否在运行,都会导致Transform的参数不能改变
  • 清除工程历史记录
    http://blog.csdn.net/i1tws/article/details/51098838
  • 渲染顺序
    在ZTest开启的情况下,由Z值决定。
    其它情况下,渲染顺序为:Render queue > sorting layer > order in layer
    UGUI的UI内部由节点顺序决定前后关系。UI在transparent queue,所以有时候可能会和粒子的显示顺序产生冲突,此时可以调整UI的Sorting layer

  • The same field name is serialized multiple times in the class or its parent class. This is not supported: -> AAAA(MonoBehaviour) BBBB(CCCC) DDDD

unity crash 原因收集

  • Assetbundle关联的Assetbundle发生了变化,而原Assetbundle没有更新,加载这个的Assetbundle可能会崩溃
    可能的Backtrace:
    0x0000000140D63DC6 (Unity) AnimationClip::GetRuntimeAsset
    0x000000014113F4CD (Unity) mecanim::animation::EvaluateBlendTree
    0x000000014115922E (Unity) mecanim::statemachine::DoBlendTreeEvaluation
    0x000000014115B15D (Unity) mecanim::statemachine::EvaluateState
    0x000000014115B9DA (Unity) mecanim::statemachine::EvaluateStateMachine
    0x00000001411159B5 (Unity) AnimatorControllerPlayable::UpdateGraph
    0x0000000140D926C4 (Unity) Animator::UpdateAvatars
    0x0000000140D935F1 (Unity) Animator::UpdateWithDelta
    0x0000000140F442EE (Unity) Animator_CUSTOM_Update

Unity源代码

ui

mysql 连接 127.0.0.1 与 localhost的区别

127.0.0.1 通过TCP连接可指定端口
localhost 通过unix socket连接,不能指定端口,指定了也不生效

并发

innodb关于事务与锁定的官方手册

InnoDB事务模型和锁定

innodb 事务隔离级别

MySQL中的锁(表锁、行锁) 并发控制锁
MySQL Innodb 事务隔离级别

多线程访问DB

mysql链接多线程安全问题

  • 多个线程一条DB连接
    会有API安全问题
  • 一个线程一个DB连接
    没有API安全问题

#FAQ

  • 无法连接数据库的一些原因
    1 密码不对
    2 未给用户设置密码
    3 未给用户usage权限
    连接权限:GRANT USAGE ON . TO ‘root’@’%’ IDENTIFIED BY ‘rootpassword’;
    所有权限:GRANT ALL PRIVILEGES on . TO ‘root’@’%’ WITH GRANT OPTION;
    更新密码:UPDATE mysql.user set password=PASSWORD(‘jubian@2013’) where user=’root’;
    更新权限:flush privileges;

  • 如何安全启动mysqld_multi
    mysqld_multi –mysqld=mysqld_safe start 1,2,3..