快捷键
全部展开或者合上某个目录,需要按住alt键。
Tab使用小技巧
每个标签窗口都可以锁定, 当然,锁定之后,点击inspector中的物体就不能够进行定位了。
脚本中的隐藏字符
若在网页或者某处复制代码进脚本,可能会出现隐藏字符误入,表面看没有东西,比如中文全角空格,但是程序会报错,非常隐蔽的错误。
关于public变量与Inpsector中的赋值
Public变量定义后,如果在脚本中修改值,那么运行时可能不会立刻运用此值,而是会根据面板中指定的值来运行,严格注意。最好的方法是直接修改面板中的值。
多开unity 窗口
如何同时运行多个unity3d实例?有时候需要同时打开多个Unity项目,在各项目之间复制东西。以下是同时运行多个Unity实例的技巧:
修改快捷方式的属性。在后面加上个 -projectPath,例如: "D:\ProgramFiles\Unity\Editor\Unity.exe" -projectPath这样的话运行的时候窗口底部会报一个找不到路径的错误,clear一次就行。
Batch
这种static可能影响物体的旋转,比如8个金币,都通过脚本围绕自身旋转,但是加了Batching static之后,就都不动了,需要去掉Batching static
如果需要渲染的物体遍布整个场景,那么不要用batch,会造成渲染负担
Profiler
Unity3d中profiler中的指数,可能会受到inspector等面板的影响,严格注意
Statistics
Unity中的统计窗格,VBOtotal和VRAM计算的是场景中的所有物体,要想单独测试某个建筑,必须把场景中的物体先都删掉,才可以。
Pivot
unity3dpivot坐标不在物体上,飞出很远。需要在3dmax里面,先导入模型,然后将轴居中到对象,然后移动对象到0,0,0.即可。
Project
unityproject中的fbx千万不能删,prefab的引用都在它上面,删了之后下次启动的时候就找不到mesh了,大忌。
发布
unity3d中,project中,尽量删掉没用的文件,然后发布,可以减小包的大小,因为有可能有些无用的文件包含在里面。
LOD
LODGroup:只有当LODbias设置为1的时候,lod的滑动条才能准确。设置在Quality 里面。设置为其他值的作用有待研究,估测类似于平滑或者缓冲。
Mono调试
mono里面断点调试,需要打开这个。
Mono中代码格式的设置需要在这里面设置,可以效果立刻出现。若是在windows里面的option设置,属于全局设置,在新工程中才能看见效果。
Console
unity中,console中会隐藏重复的输出内容(当点了collapse之后)DXT格式压缩:
Android上有时候似乎不支持DXT格式压缩。
法线贴图& Specular:
Unity中凹凸贴图(Normalmap),只有在有light的情况下才会有效果。切记。
而且有时候在vertexlit的摄像机模式下,normalmap没有效果,Specular系列的shader也会如此
画球球小代码:
// Draw ayellowsphere in scene view at distance
// unitsalongcamera's viewing direction.
var distance :float = -1.0;
functionOnDrawGizmosSelected () {
var m :Matrix4x4 = camera.cameraToWorldMatrix;
var p : Vector3= m.MultiplyPoint (Vector3(0,0,distance));
Gizmos.color = Color.yellow;
Gizmos.DrawSphere (p, 0.2);
}
TextureClip:
U3d里面的贴图不能识别max中的剪裁,所以有剪裁的图最好是重新ps一张,然后再u3d里面操作。
中文支持:
Unity3d中文支持很差,导入导出不要有中文路径
版本兼容:
Unity3d 高版本打开低版本的时候,有时报错,如下,此时可以新建一个project,然后把里面的所有内容替换成老版本里面的内容(temp文件可以保留),然后再打开这个project就可以了。
贴图设置:
Unity中的贴图可以进行设置,点击贴图,inspector中可以设置。贴图设置好了才会清晰。
U3d中可以将一张贴图本身当做烘焙图用,在legacy里面lightmap中的diffuse设置两个一样的贴图。
ImportSetting:
Unity3d中,导入的FBX文件,里面的坐标可能不正确,如下图成了垂直的mesh,解决方案:重新建立一个prefab,将模型文件和mesh都拖进去,就好了。
关于子prefab的生成,可以在Hierachy里面弄好之后,拖到project里面,就有子了。
Android 上看Profiler:
Unity中,要想在手机上跑程序,然后在电脑上看profiler:adb forward tcp:54999 localabstract:Unity-com.yyy.yyy
cmd中输入adb命令不识别的时候,要进行环境变量的设置,在path中将adb.exe所在的目录添加,最后的\不能省略。
Unity & Android 集成调试
android调试Unity3D开发:
可以通过日志打印(logcat)来跟踪。
在AndroidSDK中有个adb工具,使用此工具来跟踪运行的android应用:
adb logcat
启动logcat,并将设备上运行的Android应用的运行时信息全部打印出来。
adb logcat -s Unity
如果只想打印Unity的输出信息,使用此命令。
adb logcat -d > logcat.txt
将打印信息输出为文件。
当然,更直接的做法是在应用中集成自己的调试信息窗口,将如下代码关联到一个gameobject:
using UnityEngine;
usingSystem.Collections;
</p><p>public class GuiTextDebug:MonoBehaviour
{
privatefloatwindowPosition = -440.0f;
privateintpositionCheck = 2;
privatestaticstring windowText = "";
privateVector2 scrollViewVector =Vector2.zero;
privateGUIStyle debugBoxStyle;
privatefloatleftSide = 0.0f;
privatefloatdebugWidth = 420.0f;
publicbooldebugIsOn = false;
publicstaticvoid debug(string newString)
{
windowText =newString + "\n" + windowText;
UnityEngine.Debug.Log(newString);
}
voidStart()
{
debugBoxStyle= new GUIStyle();
debugBoxStyle.alignment =TextAnchor.UpperLeft;
leftSide =120;
}
voidOnGUI()
{
if(debugIsOn)
{
GUI.depth =0;
GUI.BeginGroup(new Rect(windowPosition, 40.0f, leftSide, 200.0f));
scrollViewVector= GUI.BeginScrollView(new Rect (0, 0.0f, debugWidth,200.0f),
scrollViewVector,
new Rect (0.0f, 0.0f,400.0f, 2000.0f));
GUI.Box(newRect(0, 0.0f, debugWidth - 20.0f, 2000.0f), windowText,debugBoxStyle);
GUI.EndScrollView();
GUI.EndGroup();
if(GUI.Button(new Rect(leftSide, 0.0f,75.0f,40.0f), "调试"))
{
if(positionCheck == 1)
{
windowPosition = -440.0f;
positionCheck = 2;
}
else
{
windowPosition = leftSide;
positionCheck = 1;
}
}
if(GUI.Button(new Rect(leftSide + 80f,0.0f,75.0f,40.0f),"清除"))
{
windowText= "";
}
}
}
}
U3d高模贴图烘到低模上,如果出现纹理不清晰,可以调高贴图的对比度,再进行烘焙,然后再贴到低模。
adb forward tcp:54999 localabstract:Unity-com.zz.zz