Unity3D 4.x编辑器操作技巧

unity wiki(en chs)   unity官网

unity manual(chs  官方最新

各个版本unity编辑器下载地址:

https://unity3d.com/cn/get-unity/download/archive (正式版本)

http://unity3d.com/cn/unity/qa/patch-releases (补丁版本)

http://www.ceeger.com/Unity/Resources/2011/Unity_History_download.html

4.6.2https://unity3d.com/cn/unity/whats-new/unity-4.6.2

4.6.9p1https://unity3d.com/cn/unity/qa/patch-releases/4.6.9p1

5.6.0f1https://unity3d.com/cn/unity/beta/unity5.6.0f1

5.6.4f1(32bit  64bit):https://unity3d.com/cn/unity/whats-new/unity-5.6.4

5.6.5p3:https://unity3d.com/cn/unity/qa/patch-releases/5.6.5p3

2017.3.1p2:https://unity3d.com/cn/unity/qa/patch-releases/2017.3.1p2

注:如果编辑器无法下载,可先下载UnityDownloadAssistant.exe(Unity安装程序)来安装编辑器

mono版本信息

<Unity安装目录>EditorDataMonoin>mono.exe -V

Mono JIT compiler version 2.0 (Visual Studio built mono)
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
TLS: normal
GC: Included Boehm (with typed GC)
SIGSEGV: normal
Notification: Thread + polling
Architecture: x86
Disabled: none

<Unity安装目录>EditorDataMonoin>monop2 --runtime-version mono.exe

runtime version: 2.0.50727.1433

using System.Reflection;

Debug.Log("Version: " + Environment.Version);// Version: 2.0.50727.1433

Type type = Type.GetType("Mono.Runtime");
if (type != null)
{
    MethodInfo displayName = type.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static);
    if (displayName != null)
    {
        Debug.Log("mono Runtime: " + displayName.Invoke(null, null));// mono Runtime: 2.0 (Visual Studio built mono)
    }
}

License文件

C:ProgramDataUnityUnity_v4.x.ulf

Unity破解

http://www.ceeger.com/forum/read.php?tid=23396&page=1

基础与小技巧

(1)Unity工程的路径中不能含有中文,最好是不要含有空格,建议用英文、数字及下划线对目录和文件进行命名;最大路径长度不要超过260个字符,目录层级太深会影响Unity访问资源的速度

(2)Unity编辑器使用的是:左手坐标系   y轴向上   游戏对象(包括相机)的正方向为z轴正向

(3)Unity默认系统单位为m,场景中最小格网为1m*1m,网格层级间的倍率为10;通过菜单添加的cube边长、sphere/cylinder/Capsule的直径为1m,Plane/Cloth的直径为10m

(4)Unity与其他三维软件的单位比例关系(该比例关系可以在导入Unity工程模型文件的Inspector面板--Model标签--Meshes块的Scale Factor属性中看到):

       Unity:Maya(Cinema4D)    = 1:100

       Unity:3dsMax(Lightwave) = 100:1

(5)图片的长宽建议为2的整数幂(注:长宽不必相等);Untiy也支持非2的整数幂的图片,对于这种图片会将其转化为一个非压缩RGBA的32位格式(注:会降低加载速度及增大游戏发布包的size)

(6)在运行模式下,对场景所有的修改都是临时的,结束运行后修改都会被还原

(7)Project搜索:robot t:Material t:Texture l:Weapon  // 在Assets中搜索类型为Material或Texture、标签为Weapon、名称中包含robot字符串的资源   --大小写不敏感

(8)Hierarchy搜索:car t:Renderer t:Light t:Terrains // 在场景中搜索类型为Renderer或Light或Terrains、名称中包含car字符串的对象  --大小写不敏感

                             t:UILabel  // 在场景中挂有UILabel脚本的对象

                             ref:Res/my.fbx // 在场景中搜索Assets/Res/my.fbx的对象引用  --大小写不敏感

(9)Hierarchy:①对象按字母升序依次排列  ②Prefab对象字体为蓝色,可以将修改后的Prefab对象,通过拖放到对应的Prefab文件上达到修改Prefab的目的 ③关闭的对象字体为灰色

(10)Console:选中一条log,按Ctrl+C可以复制该log到剪切板

(11)Build Settings:勾选“Development Build”,产生exe的pdb及脚本dll的mdb符号文件;

         同时勾选“Development Build”和“Script Debugging”,可进行脚本调试

       

(12)自动刷新(不检测资源管理器、visual studio、MonoDevelop等外部程序对工程文件的修改,所以外部的修改不会引发资源文件的导入及代码的编译等)

       

       reg add "HKCUSoftwareUnity TechnologiesUnity Editor 4.x" /v kAutoRefresh_h2404942332 /t REG_DWORD /d 1 /f

(13)代码编译后的托管dll及mdb调试符号文件放置在:工程名LibraryScriptAssemblies目录中

      

       Assembly-CSharp.dll   // 游戏逻辑  AssetsScripts目录中的脚本会编译到该模块中

       Assembly-CSharp-firstpass.dll  // 游戏逻辑,被引擎优先加载,可用于Assembly-CSharp.dll热更新  AssetsPlugins目录中的脚本会编译到该模块中

       Assembly-CSharp-Editor.dll  // 编辑器扩展  Assets下名为Editor目录中的脚本会编译到该模块中

       Assembly-CSharp-Editor-firstpass.dll // 编辑器扩展,被编辑器优先加载  AssetsPlugins下名为Editor目录中的脚本会编译到该模块中

       注:Assembly-CSharp.dll、Assembly-CSharp-firstpass.dll使用的是Unity Subset v3.5类库,Assembly-CSharp-Editor.dll、Assembly-CSharp-Editor-firstpass.dll使用的是Unity Full v3.5类库

       

      这4个是不同裁剪程度的Unity .net类库:full(全版本) > Subset(子集版本) > Micro(微版本) > Web(Web版本),以满足不同平台的需要

      各个版本中包含的类与函数列表可参考:https://docs.unity3d.com/410/Documentation/ScriptReference/MonoCompatibility.html

      例如:受浏览器沙盒限制,很多访问其他进程、本地文件等不安全的行为都是不允许的,因此Unity Web v3.5类库中把这相关的函数都删除掉了

(14)资源文件的cache按照其guid(十六进制)的开头2位数字分类放置在:工程名Librarymetadata目录中

       

(15)是否允许Attach调试

       

       reg add "HKCUSoftwareUnity TechnologiesUnity Editor 4.x" /v AllowAttachedDebuggingOfEditor_h615392104 /t REG_DWORD /d 1 /f

(16)点击菜单“Edit” - “Project Settings” - “Editor”

         使用可见meta文件(Visible Meta Files)来管理Assets目录中的资源(每个资源都会有一个guid,资源之间的关联通过设置guid的引用来实现)

         注1:若不使用meta文件,则资源的配置信息存放在Library目录的某个文件中

         注2:复制资源时,千万不要复制meta文件,否则会出现同ID的meta文件,导致新做的资源损坏

         注3:想要重命名资源,而不丢失引用关系,将资源与对应meta文件一起重命名即可

         强制使用文本(Force Text)来存储Assets目录中的资源(如:.unity、.prefab、.mat、.anim等)及ProjectSettings目录中的配置信息(如:.asset)

       

(17)后台静默运行Unity编辑器重建Library缓存  // 下面示例缓存所在路径:Test001Library

      Unity.exe -quit -batchmode  -projectPath "C:Unity4.6.9p1ProjectsTest001" -logFile "C:ReBuildProjectCache.log"

(18)Unity4.x画面渲染使用的是AutoDesk 的Beast 技术;Unity5.x阶段彻底放弃了Beast 技术,改为使用和UrealEngine 一样的一款第三方渲染引擎Enlighten 来进行画面渲染

快捷键

(1)启动Unity编辑器时,立即按住alt键,会弹出Project Wizard对话框,让用户可以选择并打开其他工程(注:该方法不会改变Unity的默认设置)

       若想每次启动都弹出Project Wizard对话框:可点击菜单“Edit” - “Preferences...”弹出的对话框General标签页下,通过勾选“Always Show Project Wizard”来开启

(2)shift + 空格  // 鼠标在任意视图窗口中悬停,按空格可以将该视图窗口最大化,再按空格恢复回之前的布局   注:unity4.3前的版本为:空格

(3)f  // 将选中的物体居中(当前场景相机所观察的中心点位置设置为物体中心)并全貌显示

(4)ctrl + shift + f  // Align With View 移动选中的物体到当前场景相机所在位置

(5)ctrl + alt + f  // Move To View 移动选中附体到当前场景相机所观察的中心点位置

(6)alt + 点击节点  // 完整展开整个树节点

(7)ctrl + p  // 运行/结束游戏

(8)ctrl + shift + p // 暂停/继续游戏

(9)ctrl + alt + p // 逐帧运行游戏

(10)操作Scene场景工具:Hand(Q)、Translate(W)、Rotate(E)、Scale(R)、Rect Handle(T

       注:Rect Handle模式下:①可通过拖动控制矩形上的边,对目标对象进行1个方向上缩放

            ②可通过拖动控制矩形上的点(有2种操作形态),对目标对象进行2个方向上缩放和绕着垂直矩形所在的轴进行旋转

            ③点击拖动矩形的中心对目标对象进行移动

            另外,当前控制矩形会根据当前相机的方向来选择是使用xoy、yoz还是zox平面矩形(尽量选择与当前相机的方向垂直的那个平面矩形)      

(11)对象的轴心点:包围盒中心/对象自身的原点(Z

(12)坐标模式:世界坐标/局部坐标(X

(13)2D模式:Alpha2(非小键盘2)

Scene透视图导航

一、鼠标滑动方式

(1)平移 -- 按住鼠标滚轮拖动(注:相机的旋转角始终不变)

       向前:相机向下滑动【下降】;向后:相机向上滑动【上升】  注:改变相机在世界坐标下的z坐标值

       向左:相机向右滑动【右移】;向右:相机向左滑动【左移】  注:改变相机在世界坐标下的x、y坐标值

(2)旋转 -- 按住鼠标右键拖动(注:相机的位置、横滚角始终不变)

       向前:相机向上转向【抬头】;向后:相机向下转向【低头】  注:改变相机的俯仰角

       向左:相机向左转向【左转】;向右:相机向右转向【右转】  注:改变相机的方位角

(3)旋转 -- Alt+拖动左键,进行360°镜头旋转

       注:按f对物体居中后,旋转中心点则为物体的中心

(4)缩放 -- 鼠标滚轮(Alt+拖动右键)(注:相机的旋转角始终不变)

       向前滚(向右或向下拖动右键):沿着相机中心轴线向前滑动【前进】   注:在相机局部坐标系下,向前平移相机

       向后滚(向左或向上拖动右键):沿着相机中心轴线向后滑动【后退】   注:在相机局部坐标系下,向后平移相机

二、FPS游戏方式

      按住鼠标右键,通过键盘W、S、A、D,进行【前进】【后退】【左移】【右移】  注:在相机局部坐标系下,前后左右平移相机

      按住鼠标右键,通过键盘E、Q,进行【上升】【下降】  注:改变相机在世界坐标下的z坐标值

      注:若同时按住shift,会加大每次移动的位移

工程中的一些特殊目录 

Editor

Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以。比如目录:/xxx/xxx/Editor 和 /Editor 是一样的,无论多少个叫Editor的文件夹都可以。

Editor下面放的所有资源文件或者脚本文件都不会被打进发布包中,并且脚本也只能在编辑时使用。一般呢会把一些工具类的脚本放在这里,或者是一些编辑时用的DLL。

比如我们现在要做类似技能编辑器,那么编辑器的代码放在这里是再好不过了,因为实际运行时我们只需要编辑器生成的文件,而不需要编辑器的核心代码。

Editor Default Resources

Editor Default Resources注意中间是有空格的,它必须放在Project视图的根目录下,如果你想放在/xxx/xxx/Editor Default Resources 这样是不行的。

你可以把编辑器用到的一些资源放在这里,比如图片、文本文件、等等。它和Editor文件夹一样都不会被打到最终发布包里,仅仅用于开发时使用。

你可以直接通过EditorGUIUtility.Load去读取该文件夹下的资源。

TextAsset text = EditorGUIUtility.Load("test.txt")as TextAsset;
Debug.Log(text.text);

Gizmos

我觉得这个文件夹其实没什么用处,如下代码所示它可以在Scene视图里给某个坐标绘制一个icon。它的好处是可以传一个Vecotor3 作为图片显示的位置。

参数2就是图片的名子,当然这个图片必须放在Gizmos文件夹下面。

这里还是要说说OnDrawGizmos()方法,只要脚本继承了MonoBehaviour后,并且在编辑模式下就会每一帧都执行它。发布的游戏肯定就不会执行了,它只能用于在scene视图中绘制一些小物件。

比如要做摄像机轨迹,那么肯定是要在Scene视图中做一个预览的线,那么用Gizmos.DrawLine 和Gizmos.DrawFrustum就再好不过了。

void OnDrawGizmos() 
{
    Gizmos.DrawIcon(transform.position, "0.png", true);
}

Plugins

如果做手机游戏开发一般 andoird 或者 ios 要接一些sdk 可以把sdk依赖的库文件 放在这里,比如 .so .jar .a 文件。这样打完包以后就会自动把这些文件打在你的包中。

Plugins/x86对应windows 32位版本,Plugins/x86_64对应windows 64位版本,Plugins/Android对应Android版本,Plugins/iOS对应iOS版本。

Resources

可以在根目录下,也可以在子目录里,只要名子叫Resources就可以。比如目录:/xxx/xxx/Resources 和 /Resources 是一样的,无论多少个叫Resources的文件夹都可以。

Resources文件夹下的资源不管你用还是不用都会被打包进.apk或者.ipa

Resource.Load :编辑时和运行时都可以通过Resource.Load来直接读取。

Resources.LoadAssetAtPath() :它可以读取Assets目录下的任意文件夹下的资源,它可以在编辑时或者编辑器运行时用,它但是它不能在真机上用,它的路径是”Assets/xx/xx.xxx” 必须是这种路径,并且要带文件的后缀名。

AssetDatabase.LoadAssetAtPath():它可以读取Assets目录下的任意文件夹下的资源,它只能在编辑时用。它的路径是”Assets/xx/xx.xxx” 必须是这种路径,并且要带文件的后缀名。

我觉得在电脑上开发的时候尽量来用Resource.Load() 或者 Resources.LoadAssetAtPath() ,假如手机上选择一部分资源要打assetbundle,一部分资源Resource.Load().

那么在做.apk或者.ipa的时候 现在都是用脚本来自动化打包,在打包之前 可以用AssetDatabase.MoveAsset()把已经打包成assetbundle的原始文件从Resources文件夹下移动出去在打包,

这样打出来的运行包就不会包行多余的文件了。打完包以后再把移动出去的文件夹移动回来。

StreamingAssets

这个文件夹下的资源也会全都打包在.apk或者.ipa 它和Resources的区别是,Resources会压缩文件,但是它不会压缩原封不动的打包进去。

并且它是一个只读的文件夹,就是程序运行时只能读 不能写。它在各个平台下的路径是不同的,不过你可以用Application.streamingAssetsPath 它会根据当前的平台选择对应的路径。

有些游戏为了让所有的资源全部使用assetbundle,会把一些初始的assetbundle放在StreamingAssets目录下,运行程序的时候在把这些assetbundle拷贝在Application.persistentDataPath目录下,

如果这些assetbundle有更新的话,那么下载到新的assetbundle在把Application.persistentDataPath目录下原有的覆盖掉。

因为Application.persistentDataPath目录是应用程序的沙盒目录,所以打包之前是没有这个目录的,直到应用程序在手机上安装完毕才有这个目录。

StreamingAssets目录下的资源都是不压缩的,所以它比较大会占空间,比如你的应用装在手机上会占用100M的容量,那么你又在StreamingAssets放了一个100M的assetbundle,那么此时在装在手机上就会在200M的容量。

参考:Unity3D研究院之手游开发中所有特殊的文件夹

原文地址:https://www.cnblogs.com/kekec/p/6049304.html