技术BLOG:http://www.unity.5helpyou.com/2373.html#comment-43108
--------------------------------------------------------------------------
11:47 2016/11/30
Before you can load a level you have to add it to the list of levels used in the game. Use File->Build Settings... in
Unity and add the levels you need to the level list there. MonoBehaviour.OnLevelWasLoaded is called on all active game
objects after the level has been loaded
在加载任何场景之前,必须将场景添加到build settings列表

Assets/code/Engine/Common/Config.cs(51,49): error CS0117: `System.IO.File' does not contain a definition for
`ReadAllText',平台切换的问题,默认是webplayer,应该切换到windows
14:53 2016/12/3
这个问题是由于U3D editor设置platform为 web player
15:35 2016/12/3

17:49 2016/11/30
loadScene(index or name)可用路径或场景名,如果用场景名有重名是只加载第一个

11:31 2016/12/9
U3D里直接实现IPointerUpHandler接口后发现OnPointerUp没有调用,必须IPointerDownHandler, IPointerUpHandler一起实现,然后
OnPointerDown,OnPointerUp就都能收到消息了

15:38 2016/12/9
调用顺序:awake, onlevelwasloaded, start
注意,onlevelwasloaded 在 start之前。
awake是一个物体实例化完成之后立即调用,场景中所有物体都实例化完成,所有资源都加载完后,调用onlevelwasloaded,然后紧接着
调用各个物体的start()
18:15 2016/12/11
Expanding invalid MinMaxAABB 这个诡异的错误原因是:对某物体的父接点设置了setactive(false),然后又去企图设置它的属性。
public void Init ()
{
cellsDict = new Dictionary<int, GameObject> ();
cellPrefab = Resources.Load ("blockCell") as GameObject;
lineAux = new GameObject ("lineAux");
lineAux.SetActive (true);//这里如果不设置,则lineAux可能是隐藏的,下面对材质的设置将会触发以上错误。

LineRenderer lrder = lineAux.AddComponent<LineRenderer> ();

lrder.SetColors (Color.green, Color.green);
lrder.SetWidth (0.1f, 0.1f);
lrder.SetVertexCount (5);
lrder.material = new Material (Shader.Find ("Qx/Unity/Legacy/Legacy-Diffuse"));
lrder.material.color = Color.green;
}
10:56 2016/12/12
=============================上面问题原因是:SetVertexCount(5),设置了五个顶点,又没有去给顶点赋值,默认值又比较大导致
了计算数据出现无穷大的现象================
从上面也可看出,linerender居然和GUI有关


12:12 2016/12/12
U3D打可执行包时,shader除了在edit-projectsettings-graphic中设置的,其它都不会打进EXE中,也不会assetbundle,除非设置了打
包标识 assetbundle的tag
13:20 2016/12/12
GameObject[] auxLines = new GameObject[4]; 这时只是声明了一个数组,数组的每个成员还没赋值,还不能使用。
这时auxLines [0] auxLines [1],auxLines [2],auxLines [3]全为null
还不能使用。要想使用,必须:
for(int i=0; i<4; ++i)
auxLines [i] = new GameObject()
14:05 2016/12/12
对于每帧getcomponent的东西,消耗有点大,最好做预处理。
14:24 2016/12/12
放在Editor下的脚本挂到游戏场景的物体上是无效的,提示:没有继承自Monobehavivor

11:38 2016/12/15
将一张带有透明像素的texture转换为sprite时,U3D会根据透明像素的范围自动将图片切分为许多的三角形,增加了许多顶点。这样做
是为了尽可能少的绘制透明像素。
以减少ALPHA测试与ALPHA混合。以增加三角形为代价换取透明像素的绘制。
10:14 2016/12/16
UI Prefab不同于模型prefab,例如制作了一个UIprefab A,上面有一个Image, button。A 的大小为8K, 再制作一个类似A的 prefab
B, 二者总大小将为 A+B = 16K,
也就是说UI的prefab是实际容量的增加,而不是对UI元素的引用。比如A和B都有BUTTON,实际是增加BUTTON的大小而不是对它的引用。
11:41 2016/12/16
BuildPipeline.BuildPlayer (scenes, target_dir, build_target, build_options);是打包可执行程序。
BuildPipeline.BuildAssetBundles 是打包资源
18:21 2016/12/16
当发现SVN无法cleanup时,将清理选项全部勾选,再清理就可以了。
8:47 2016/12/19
原来TAG也可以在打包版本中使用。之前应该是其它问题导致的。
11:19 2016/12/19
GameObject.Destroy(obj.transform:GetChild(i))会发生什么? 提示:不能被销毁,XX组件还在依赖它。
这是因为obj.transform:GetChild(i)获取的是一个transform,而不是一个Gameobject,单纯销毁GO的Transform组件是不允许的,因为
此GO的其它组件还在。
正确写法:GameObject.Destroy(obj.transform:GetChild(i).gameobject)

14:41 2016/12/19
The GC Alloc column shows how much memory has been allocated in the current frame, which will be collected later by the
garbage collector. By designing your code to keep this value at zero, you can avoid the Garbage Collector from causing
hiccups in your framerate.
15:15 2016/12/19
IPointerDownHandler, IPointerUpHandler, IDragHandler这些接口实现了后,如果是UI,比如BUTTON,当用户点击了此按钮,此按钮
的OnPointerDown等就会被调用。
如果是场景中的3D物体实现了以上接口,比如一个CUBE,点击CUBE,此时CUBE的OnPointerDown并不会被调用。还必须给主相机增加一个
physics raycaster并且指定CUBE所在的LAYER在EVENTMASK列表中。
--------------
但如果不给相机增加physics raycaster,也可以通过 Physics.RayCast(ray, dist, out hitInfo, layermask)接口来判断有没有物体
被点中,且返回点中的坐标等信息。
layermask传递希望进行测试的LAYER。
15:37 2016/12/19
相机的culling mask,在其列表中打勾的都是被此相机绘制的,不打勾的则不会绘制。这与setactive有什么区别?
这里仅是绘制与否,并不是隐藏与显示。当物体被隐藏了就无法点击它,无法与它交互。而不绘制的物体还可以被点击。还会被UPDATE
等。而一个物体被setactive(false)后就不能被点击 了。

10:39 2016/12/20
addcomponent后就会调用 awake, start等函数。
12:04 2016/12/22
U3D不支持DDS格式,支持的格式:PSD, TIFF, JPG, TGA, PNG, GIF, BMP, IFF, PICT

18:03 2016/12/26
组件是一个对象,而不是一个类。
18:45 2016/12/28
When you set the Characters drop-down in the Import Settings to Dynamic, Unity will not pre-generate a texture with all
font characters. Instead, it will use the FreeType font rendering engine to create the texture on the fly. This has the
advantage that it can save in download size and texture memory, especially when you are using a font which is commonly
included in user systems, so you don’t have to include the font data, or when you need to support asian languages or
large font sizes (which would make the font textures very large using normal font textures).

动态字体,选择了动态字体,UNITY编辑器不会产生一张包括所有字符的字体贴图。而是在使用时利用freetype字体引擎产生部分需要的
贴图。
如果不选择动态字体,则打包时就多了一张包含全部字符的字体贴图,可能很大。如果用户机器上有对应字体时。。。

11:53 2016/12/29

Parent of RectTransform is being set with parent property. Consider using the SetParent method instead,
with the worldPositionStays argument set to false. This will retain local orientation and scale rather than world
orientation and scale,
which can prevent common UI scaling issues.
10:00 2016/12/30
自己制作的按钮,点了之后没有表现效果,但事件响应了。这是由于按钮的 target graphic选错了,如果造成其它按钮正在使用的图片
,则会效果会表现在其它按钮上。
正确的做法是选择自己按钮的一张图片,才能看到正确的表现效果。
11:12 2017/1/5
C# 字符串处理几个好用函数, substring, startwith, endwith, replace(str, str1, str2)
9:57 2017/1/6
Upgrade Guides 能看到各版本的改动
Upgrading to Unity 5.3 [Released 08dec15]
Upgrading to Unity 5.2 [Released 08sep15]
Upgrading to Unity 5.0 [Released 03mar15] (There are several sub-pages to this.)
Upgrading to Unity 4.0 [Released 13nov12]
Upgrading to Unity 3.5 [Released 14feb12]
11:54 2017/1/6
U3D的压缩算法有LZMA,LZ4,其中LZMA是7Z使用的压缩算法,压缩率:7z > rar > zip。LZ4压缩率要低一些,但速度极快,不用全部解压
就可以使用其中文件。
因此在游戏中最适合使用LZ4,也就是 chunk-based的压缩。
对以上三种,经过测试,压缩算法的通用规则:图片视频几乎没什么压缩率,其它资源压缩较大,游戏模型原始资源很大但压缩率可达
80-90%,因此,对于游戏资源,压缩后图片最占资源了。
特别是2D地图的游戏。其中JPG还稍微能压缩一些,PNG就几乎完全压缩不了,有时甚至压缩后变大。

然而,使用UNITY打包时,就算是PNG图片,也能达到50%的压缩率!这是为什么?有损压缩?原来是在图片资源的属性面板页上有设置的
,默认情况是 format : compressed
看文档说明,这种压缩是Compressed RGB texture. This is the most common format for diffuse textures. 4 bits per pixel (32
KB for a 256x256 texture).每个像素
只有4位了,当然压缩的有点过了。还可以选择16位的压缩,32位真彩色等。最高的一种是crunched,这种是有损压缩,压缩率非常高。
16:15 2017/1/6
m_SystemData.empty() 打包时报这个错,重启UNITY就好了。
18:01 2017/1/6
对于PNG图片,没有透明像素的图要比有透明像素的小。这说明PNG在存储不透明像素时没有浪费像素位。
15:12 2017/1/8
packing tag,在对地图的所有图片赋予了一个值后,对地图图片打包AB后,大小为原来10倍!不知原因是什么
15:22 2017/1/10
QueryPerformanceCounter这个WIN32 API 在安卓上不能使用,大概只能用于PC吧,手机和PC的CPU架构不一样吧。其它WIN32 API,如
ZeroMemory是可以使用的。

15:38 2017/1/10
Application.dataPath是绝对路径!!!!!
17:10 2017/1/16
SceneManager.sceneCount + "," + SceneManager.sceneCountInBuildSettings
前者是指当前加载的场景,后者是指在BuildSettings中存在的场景。
一般情况下,当前加载的场景只有一个,除非使用了additive加载。
相应的SceneManager.GetSceneAt(0)传0即可获取当前场景
下拉列表表项的获取:dropdown.options[idx]
16:55 2017/1/17
sprite的问题:在默认情况下,在场景中创建一个sprite,然后赋予一个图片。这张sprite将保持原来图片的原始尺寸(不透明像素部
分)
这张图与我们的2D地图上占
9:10 2017/1/18
PNG图片的透明像素是不会增加图片大小的
9:15 2017/1/18
TAG在打包时注意:TAG是保存在工程设置中的,当工程设置删除了后(只剩下Assets文件夹)再启动工程后会生成新的工程设置,这时
原来的TAG就丢失了,但

TAG下拉菜单中还是存在的,不过打包时就会出现找不到TAG的问题。
17:52 2017/1/19
U3D可以通过设置渲染队列来控制物体渲染的先后顺序。
通过fragment shader返回的颜色值的alpha来控制渲染的透明度,前提是设置了混合方式,混合默认是不开的,设置了混合方式时自动
打开混合了。
ztest zwrite默认是打开的,ztest默认是lessequal。ztest是指渲染当前物体时,拿当前物体的Z与Z缓存中的Z比较,如果满足ztest设
置,则将当前像素渲染
否则不渲染。zwrite则是指是否将当前像素的Z写入Z缓存,这个决定只会影响后面渲染的像素,并不影响当前像素。
--------------------------
Z缓存中每个像素点的Z值只有一个,后来写入的覆盖原来的。
ALPHA混合的条件是透明物体更靠近相机。注意Z缓存的Z值是相对于相机的,并不是世界空间的Z值。
17:33 2017/1/22
有时候对UI图片应用 sliced选项时,会提示:this assets does not have a border。
这个属性是在meta文件中存储的,但不知道是如何做的?
15:47 2017/1/23
U3D中,自己创建的资源还是要手动释放的,比如释放内存中加载的资源,销毁自己NEW出的GO。
17:49 2017/2/3
Debug.Log有时候会出现代本应输出却没输出的问题。使用插件Debugger.Log可以正确输出,原因不明。
已知Debug.Log会有不立即输出的问题,即输出时刻与代码执行位置不同,可能晚于代码所在的时刻而输出。比如在某行代码A之前写上
一句Debug.Log("xxxx"),这个输出可能会在代码A执行之后输出。
10:21 2017/2/6
探索UNITY SHADER 可以找到UNITY内置SHADER的下载地址:https://unity3d.com/cn/get-unity/download/archive
11:23 2017/2/7
UI画面的分辨率问题??????
12:04 2017/2/10
跨平台问题,C#可以跨平台吗?不能,要借助.NET,就是说相应机器上必须装了.NET才行。C#程序是中间语言IL,在安装了.NET的机器上
运行时,.NET将启动运行时来解释执行C#编译成的中间程序,这就实现了跨平台运行。
U3D程序可以跨平台吗?可以,U3D跨平台的基础是MONO,MONO自己实现了类似.NET的大部
分类库的功能,且直接打包进了U3D的发布程序中,这就是为什么U3D空程序也有10M的原因。MONO把.NET的功能实现到程序中以便在程序
运行时扮演运行时的角色来对程序解释执行。这样机器不用安装MONO或.NET也能直接运行U3D程序。
11:07 2017/2/23
U3D 宏定义的问题:注意,在UNITY编辑器中,不管切换到什么平台,UNITY_EDITOR总是存在的,因此有如下现象:
#if UNITY_EDITOR --处于编辑器模式下,这个总是输出的,不管切换到什么平台
Debug.Log("editor==========================");

#endif

 

#if UNITY_ANDROID
--如果切换到安卓平台,则同时输出 editor, android两行
Debug.Log("android========================");

#endif

 

#if UNITY_IOS

Debug.Log("plat_ios-------------==");

#endif

 

#if PLAT_AND
Debug.Log("plat_and====================");

#endif

#if PLAT_PC
Debug.Log("plat_pc====================");
#endif
14:52 2017/2/23
StackTraceUtility这个类可用于输出调用栈,这在调试LUA脚本时特别有用,然而这个类在手册中却查不到!!
17:40 2017/2/23
UNITY 用高版本打开低版本的项目时,API会自动升级,但反过来却可能不行,比如 5.35F1升级到5.51F1后再清空项目设置,然后
使用5.35F1打开,报错:UnityEngine.AI.NavMeshAgent,这是5.51F1中的写法,而5.35F1中应该是UnityEngine.NavMeshAgent
9:42 2017/2/27
[OnOpenAssetAttribute(0)]

public static bool OnOpenAsset(int instanceID, int line){}//自定义函数
这样是定义了一个UNITY编辑器的回调函数,当在UNITY内打开资源时就会调用它
10:40 2017/2/27
streamingassets是只读的,注意,以前没注意过这个问题。
这就是为什么热更新资源时不放到这个文件夹的原因,它不能被写!
所以,就只能放到持久化目录下了。
Resources文件夹也是只读的!且此文件夹下的所有资源都会被无条件打包,不管它有没有被引用到。比如下面有两张贴图并有在游下用
但放在了此文件夹下,照样会被打进包里。
15:28 2017/2/27
在UNITY中 宏定义的作用范围最大只是文件域的。
如 #undef UNITY_EDITOR就只在当前文件有作用,另外文件中并没有影响!!!!
16:12 2017/2/27
注意:C#文件系统的相关函数在安卓和IOS上是可以用的,但要注意路径和PC上不一样,如下:
if (File.Exists(fullPath))