Unity初学者肯定能用得上的50个小技巧
Posted 周周的Unity小屋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity初学者肯定能用得上的50个小技巧相关的知识,希望对你有一定的参考价值。
本博客基于Unity2018.4.36版本+Visual Studio2017版本,总结了本人在工作学习中使用Unity和写脚本的50个超实用小技巧。对于Unity新手来说掌握这些技巧一般也能熟练使用Unity编辑器了;对于Unity初级开发者来说,掌握这些脚本开发技巧,对于提升开发效率是有一定的事半功倍的效果的。(不同版本快捷方法按键可能不同)
Unity实用小技巧
- 👉一、Unity编辑器使用小技巧
- 1、最大化窗口
- 2、保存程序运行时组件属性面板的改变值
- 3、Find References In Scene(查找资源在场景中的引用)
- 4、Select Dependencies(全选当前资源的全部依赖)
- 5、场景物体高亮选择
- 6、Scene与Game视图对齐
- 7、查找含有某组件的游戏物体
- 8、Revert Factory Settings恢复布局出厂设置
- 9、查找某种类型的资源
- 10、显示/隐藏Gizmos
- 11、给游戏物体或脚本自定义图标
- 12、工具栏快捷键
- 13、合并场景
- 14、Scene场景视图中的三维可视化快捷操作方法
- 15、多看多学多记Unity手册和脚本API参考手册
- 16、善于使用Console控制台,并且会用!
- 17、Inspector调试模式
- 18、快速新建脚本并挂载到游戏对象上
- 19、颜色拾取和复制粘贴
- 20、Inspector面板数值输入
- 21、Inspector面板的锁定
- 22、展开/折叠父物体下的所有子物体节点
- 23、保存编辑器窗口布局
- 24、创建游戏对象/数组元素副本快捷键
- 25、 逐帧查看程序运行
- 26、查看游戏运行时性能统计
- 27、测试游戏时静音
- 28、快速切换Scene窗口的2D和3D窗口
- 29、开关场景特效
- 30、隐藏和锁定渲染层级
- 👉二、C#脚本写作小技巧
- 1、Visual Studio自动语句补全
- 2、脚本不挂载到游戏对象执行
- 3、随机获取一个布尔值
- 4、游戏对象比较时建议使用CompareTag方法
- 5、移动代码行
- 6、养成写 #region和#endregion 的好习惯
- 7、数据类型struct和Class的序列化
- 8、高亮显示Debug.Log对应的游戏对象
- 9、风格化Debug.Log的输出信息
- 10、初始化时缓存组件引用
- 11、字符串性能优化
- 12、快速注释代码
- 13、快速对齐代码
- 14、快速打开查找与替换模式
- 15、快速定位到函数或变量定义处
- 16、快速查找函数或变量的所有引用
- 17、检查脚本中空的Start和Update函数
- 18、自定义脚本模板
- 19、快速比较距离
- 20、方便常用的属性
👉一、Unity编辑器使用小技巧
1、最大化窗口
按住Shift+空格键,可以快速最大化鼠标所在的窗口,而不用右键或选择窗口右上角的Maximize命令。
2、保存程序运行时组件属性面板的改变值
我们希望把程序运行时物体组件改变的值复制下来,然后把该值赋值给编辑状态下的物体组件初始值,可以这么操作:
运行时:定位到该物体组件,鼠标点击组件右上角的齿轮按钮,点击Copy Component即可赋值该组件值;停止运行后,在该物体组件上,点击Paste Component Value命令,就可以修改为之前运行时改变的值。(不同物体的相同组件也可以用此方法改变组件值;同样也可以批量修改多个物体的组件值,前提是上一次复制的是该组件的值)
3、Find References In Scene(查找资源在场景中的引用)
当我们需要查找资源(脚本、图片、预制体、材质球等)被场景中那些物体引用到了,可以在该资源的右键菜单中点击find references in scene命令即可查看该资源在场景中的引用情况:
4、Select Dependencies(全选当前资源的全部依赖)
资源的右键菜单select dependencies命令可以查找到当前资源的全部依赖。在我们导出package时经常要用到,为了确保导出的包不丢失资源,可以在scene的右键菜单中点击Select Dependencies命令,这时project面板中就可以看到当前场景的的全部依赖资源了,此时再点击Import Package导出包。
5、场景物体高亮选择
在Scene面板右上角的Gizmos下拉列表中,勾选Selection Outline选项表示在选中物体时显示高亮边缘,否则不显示。
6、Scene与Game视图对齐
当我们需要让game视图显示的内容和scene一样时,可以在Hierarchy面板选中Camera,按下Ctrl+Shift+F,即可快速将Game视图的内容与Scene显示一致。
7、查找含有某组件的游戏物体
当你需要查找某个组件挂载到了那些游戏物体上时,可在Hierarchy面板的搜索框中输入组件名称,即可看到。(注意输入名称时不要带空格!)如:
8、Revert Factory Settings恢复布局出厂设置
当你不小心将编辑器布局弄乱时,可点击编辑器右上角Layout打开下拉菜单,选择revert factory settings即可恢复布局默认设置。
9、查找某种类型的资源
在Project面板中的搜索框中输入“ t:+资源类型 ”,即可过滤显示某种类型的资源,比如输入“t:script”,会显示所有脚本,输入“t:texture”,会显示所有贴图,输入“t:scene”,会显示所有场景文件等。
10、显示/隐藏Gizmos
如果你觉得场景中有些物体带有图标影响你的操作了,你可以单击Scene面板右上角的Gizmos下拉列表,选择显示或隐藏某些组件的图标和Gizmos标识;也可以单击Game面板右上角的Gizmos按钮,显示或隐藏所有资源的图标和Gizmos。
11、给游戏物体或脚本自定义图标
选中游戏物体或脚本,点击其Inspector面板左上角的小三角符号,可以游戏物体或脚本指定一个特定颜色的标识,做路径寻路或空物体的可视化比较有用。也点击Other按钮,选择自己喜欢的图片作为标识。(Unity小彩蛋:命名为GameManager的脚本图标为齿轮样式)
12、工具栏快捷键
点击键盘上的Q、W、E、R、T、Y快捷键可快速切换移动,选择,缩放等工具
13、合并场景
当我们新建demo场景测试一些小功能后,可以在Project面板中,将demo场景拖动到主场景上,依次点击:,Merge into existing——Semantic and merge tool,即可将场景进行合并。
14、Scene场景视图中的三维可视化快捷操作方法
1.旋转视角:同时按下【Alt+鼠标左键】快捷键,以当前轴心点来旋转视角。
2.移动视角:按住鼠标中键不放,移动场景的视角.
3.缩放视角:滚动鼠标中键的滚轮(或者同时按【Alt+鼠标右键】快捷键),缩放场景的视角。
4.飞行视角:按住鼠标右键不放,单击键盘上的W/A/S/D键以第一人称视角在Scene视图中飞行浏览。
15、多看多学多记Unity手册和脚本API参考手册
Unity手册打开方式:
1.选择菜单栏Help(帮助)→Unity Manual(Unity手册)命令打开默认浏览器,就能看到以下Unity手册:
这里有不同版本的手册供处初学者阅读来全面了解Unity的使用。
2.Unity手册传送门
脚本API手册打开方式:
1.选择菜单栏Help→Scripting Reference(脚本参考手册)命令打开默认浏览器,就能显示出脚本参考手册,同样这里也给初学者提供了不同版本的api手册,用来查询脚本的类和方法、属性和其他信息,还提供的使用API的示例脚本。
2.脚本API手册传送门
16、善于使用Console控制台,并且会用!
Console(控制台)是Unity中重要的调试工具,按下【Ctrl+Shift+C】快捷键可打开该视图,控制台会显示输出调式信息,脚本编译时和项目运行是的错误、警告或信息。我们要学会看控制台的错误信息,根据这个信息去定位出现的错误的位置,如果第一时间不能根据错误提示解决,那就要学会在错误位置断点调试,找到报错的原因,并去解决它。如下图:
出现报空的错:检查是否给对象赋值了,如不能解决就去脚本中在出现错误的代码行左键点击进行断点调试,一步步去排查错误原因并解决。希望大家能养成断点调试的好习惯,对自己解决错误有很大帮助。
17、Inspector调试模式
在Inspector面板右上角的下拉菜单中,选择Debug命令,可启动调试模式,此时将显示组件包含的所有变量,包括私有变量。当运行编辑器时,可以实时查看各组件所有变量的变化。
18、快速新建脚本并挂载到游戏对象上
选中游戏物体,在其Inspector面板上点击Add Component按钮,在搜索栏输入你要新建脚本的名字并按下回车键,这个新脚本就会直接挂载到该物体身上,然后双击脚本即可打开编辑器进行代码编写。
19、颜色拾取和复制粘贴
在使用颜色面板时,取色笔可以拾取Unity编辑器之外的颜色。我这有一篇Unity拾取屏幕外像素颜色的脚本哦!传送门:
拾取Unity编辑器外的颜色实现教程
另外,颜色是可以复制粘贴的,在颜色属性栏右键命令选择即可,也可以使用快捷键Ctrl+C/V进行复制粘贴
20、Inspector面板数值输入
在Inspector面板中涉及到数值输入的字段,不仅可以直接输入数据,也可以在输入框输入数学表达式(加减乘除均可),按下回车键后Unity会将计算结果显示到输入框中。
21、Inspector面板的锁定
选择Inspector面板右上角的小锁按钮,或在下拉菜单中执行Lock命令,即可将当前选中的游戏物体的Inspector面板锁定。然后你还可以指定Add Tab→Inspector命令,添加一个Inspector面板,这样就能方便的在两个游戏物体直接复制组件数据,不用点来点去那么麻烦了。
22、展开/折叠父物体下的所有子物体节点
在Hierarchy面板中,按住Alt键,点击某一父物体属性节点,可展开当前节点下的所有子节点;再点击节点即可折叠所有子节点。
23、保存编辑器窗口布局
可以自定义自己喜欢并习惯用的Unity窗口布局,设置好之后,如果以后的项目也希望用这个布局,那你需要选择编辑器右上角的Layout下拉菜单中的Save Layout命令,可将该布局保存,以后都可以选择此布局使用。
24、创建游戏对象/数组元素副本快捷键
选择一个游戏物体或这多选一组游戏物体,按下Ctrl+D快捷键即可快速创建该游戏物体的副本,用同样的方法也可以创建数组元素的副本。
25、 逐帧查看程序运行
运行时点击暂停按钮右侧的步进(Step)按钮,可在程序运行时逐帧查看程序运行状态,对于定位错误位置有很大帮助。
26、查看游戏运行时性能统计
点击Game窗口右上角的Stats按钮可以查看游戏性能统计数据,如帧率、批处理等指标。
学会查看Profiler窗口,点击Window→Analysis→Profiler命令,查看更详细的分析数据,帮助你做性能优化。
27、测试游戏时静音
点击Game窗口右上角的Mute Audio按钮,可在程序运行时将所以声音关闭。
28、快速切换Scene窗口的2D和3D窗口
点击键盘字母上面的数字2按键可快速切换2d和3d模式。
29、开关场景特效
在Scene面板顶部的图片下拉列表中,可选择开关某种类型的特效。
30、隐藏和锁定渲染层级
在编辑器右上角的Layers下拉菜单中,点击对应层右侧的眼睛按钮,可以隐藏或显示某个层上的游戏物体;点击锁按钮,可对某个层进行锁定或解锁,当被锁定时,该层上的所有物体将不能被选择。
👉二、C#脚本写作小技巧
1、Visual Studio自动语句补全
使用VS写脚本时,输入 if、for、switch、foreach、try、while等语句后可双击Tab键完成语句补全
tips:for补全后,修改变量i为其他变量,此时鼠标左键点击可自动修改后两个变量名。
2、脚本不挂载到游戏对象执行
一般来说,脚本都是要挂载到游戏对象上才能执行,但Unity提供了一个方法可以不用挂载脚本到游戏对象上也可以在程序运行时执行某个方法的语句。只需要在脚本的方法声明[RuntimeInitializeOnLoad(RuntimeInitializeLoadType.BeforeSceneLoad)] 即可,常用于程序初始化前做一些额外的初始化工作,代码如下:
(注意:必须是静态方法上声明才会生效)
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
private static void AfterSceneInit()
Debug.Log("场景加载之后执行");
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void BeforeSceneInit()
Debug.Log("场景加载之前执行");
3、随机获取一个布尔值
Unity里面的随机类Random中使用Random.value可以返回0~1之间的随机数,所以可以让其返回值与0.5f进行比较,就可以获取一个随机布尔值True或false,代码如下:
bool IsTrueOrFalse=(Random.value>0.5f);
4、游戏对象比较时建议使用CompareTag方法
当使用到游戏对象的标签Tag进行比较时,从性能上考虑,建议使用CompareTag方法,而不用=去进行判断。
即:
if(gameObject.CompareTag("Player"))
//等效于
if(gameObject.tag=="Player")
5、移动代码行
在Visual Studio中,按下Alt+键盘上/下键,即可使鼠标光标所在代码行上移/下移。
6、养成写 #region和#endregion 的好习惯
写代码除了养成写注释的好习惯外,也要养成写#region和#endregion 的好习惯,当你的代码有成百上千,甚至更多行时,使用该语句可将两者之间包含的代码块折叠,方便阅读。
7、数据类型struct和Class的序列化
如果需要给数据类型struct和Class在面板上赋值,可以在struct和Class声明前添加[System.Serializable]即。如:
[System.Serializable]
public class UIData
public Text txt;
public Image IMG;
[System.Serializable]
public struct ObjData
public Transform pos;
public string name;
public class NewBehaviourScript : MonoBehaviour
public UIData mgUIData;
public ObjData myObjData;
8、高亮显示Debug.Log对应的游戏对象
当使用Debug.Log方法输出信息时,可将gameObject作为此方法的第二个参数,当程序运行时,单击Console面板中对应的输出信息,可在Hierarchy面板中高亮显示挂载了此脚本的游戏物体。
private void Awake()
Debug.Log("程序初始化", gameObject);
9、风格化Debug.Log的输出信息
使用debug.log输出字符串信息时,可以用富文本标记来强调内容,如:
Debug.Log("<color=green>程序初始化加载资源</color>"+"bundle is loading");
10、初始化时缓存组件引用
如果某个组件需要被频繁的访问时,可以在程序初始化时获取到该组件的引用,而不是在需要时才去获取,也就是减少使用GetComponent< T>(),从而避免由于重复获取引起的性能开销。
private MeshRenderer mesh;
private void Awake()
mesh = GetComponent<MeshRenderer>();//初始化时提前缓存组件引用
void Update()
mesh.material.color = Color.red;
同理,尽量不适用Camera.main获取相机组件,尤其避免使用类似以下方法:(会带来更大的性能消耗)
Camera cam=GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();
11、字符串性能优化
如果某些字符串在整个项目中不会改变且被频繁使用,可将其存储在静态只读变量中,从而节省内存分配,如:
static readonly string Fire1="Fire1";
void Update()
Input.GetAxis(Fire1);
//不建议直接使用字符串
Input.GetAxis("Fire1");
12、快速注释代码
按下Ctrl+K+C组合键可快速注释选中代码块或光标所在处代码行,Ctrl+K+U取消注释
13、快速对齐代码
按下Ctrl+K+F组合键可快速将选中代码块或光标所在处代码与上下文对齐。
14、快速打开查找与替换模式
按下Ctr+F组合键可快速打开查找模式:(可选择当前文档或整个项目等查找匹配字符串)
点击左边下拉箭头切换到替换模式:(可选择替换下一个或全部替换)
当你需要对重复命名的变量时,就可以使用查找替换模式进行替换了;或者快速查找某一函数等等。
15、快速定位到函数或变量定义处
鼠标光标放置在变量或函数方法处,按下F12可快速定位到其定义的代码行。
16、快速查找函数或变量的所有引用
鼠标光标放置在变量或函数处,按下Shift+F12组合键可快速查看其所有引用,单击某一引用即可定位到其代码行。
17、检查脚本中空的Start和Update函数
检查空的MonoBehavior Start和Update方法,无论你有无写逻辑,它Start函数都会执行一次,Update函数也是会每帧执行一次。如果没有逻辑实现就将其删掉,因为跑空函数多少会损耗效率。
18、自定义脚本模板
在你Unity版本安装目录下依次打开:Editor/Data/Resources/ScriptTemplates即可看到一堆脚本模板,选择你常用的脚本模板进行修改,如NewBehavioutScript.txt
按照你个人的编码喜好修改模板,以后创建的新脚本都将是以你自定义的模板展现,如:
19、快速比较距离
将两点直接的距离与一个固定距离进行比较时,可使两点相减后取平方(即sqrMagnitude),然后用该值与某个距离值的平方进行比较。不建议使用Vector3.Distance方法获取两点之间的距离,然后与给定的距离值进行比较。因为Vector3.Distance(a,b)相当于(a-b).magnitude,即求平方根,而sqrMagnitude方法省去了求平方根的操作,所以比magnitude执行快。
//建议使用:
Vector3 a = new Vector3(1, 1, 0);
Vector3 b = new Vector3(0, 0, 0);
float value=1.0f;
if((a-b).sqrMagnitude<value*value)
//不建议:
if(Vector3.Distance(a,b)<value)
20、方便常用的属性
为变量添加一些属性可使它们在Inspector面板中更容易被使用,下面列举一些常用的属性:
- Range属性
在变量前添加Range属性,可将其限定在某个范围内并使用滑块调节。
[Range(0,10)]
public int speed=5;
- Space属性
两个变量声明之间加入Space属性可在Inspector中添加空行
[Range(0, 10)]
public int speed = 5;
[Space(10)]//表示添加10行空行
public int count = 1;
- SerializeField属性
将私有变量标记为SerizlizeField,可在Inspector中将其显示
[SerializeField]
private string posStr="1,1,1";
- HideInInspector属性
如果不希望在Inspector面板张艳红显示共有变量,可将其标记为HideInInspector。
[HideInInspector]
public string objName="方块";
- Header属性
添加Header可在Inspector面板中显示文字描述
[Header("主角数据")]
public ObjData myPlayerData;
- Tooltip属性
在变量前标记Tooltip,当鼠标悬停在面板中的变量时,可显示该变量的文字说明
[Tooltip("文件路径")]
public string path = "F:/unity.txt";
- TextArea属性
当我们使用string类型要输入比较长的文字时,往往会看不全文字,可以将其标记为TextArea即可显示文本区域。
[TextArea]
public string objName="方块 af adf adfaiudfgadf hadhf adhfaodhfnao d1222";
(未完待续…觉得有用记得一键三连哦!!!)
以上是关于Unity初学者肯定能用得上的50个小技巧的主要内容,如果未能解决你的问题,请参考以下文章