原帖地址:https://zhuanlan.zhihu.com/p/54763553

1. 高亮选择

在Scene面板右上角的Gizmo下拉列表中,可以通过设置Selection Outline选项决定是否在选中物体时显示边缘高亮的标识。

2.Pixel Perfect Camera

在摄像机上挂载Pixel Perfect Camera组件能够使2D像素风格的游戏画面更加整洁清晰。此组件需要使用Package Manager安装2D Pixel Perfect包。

3.以Y轴为依据进行Sprite排序

对于2D游戏,将Transparency Sort Mode (Edit > Project Settings > Graphics ) 设置为Custom Axis,然后设置Transparency Sort Axis,场景中的Sprite可以根据Y轴进行排序。如下图所示,当设置为(0,1,0)时,Y坐标相对较大的Sprite排在Y坐标相对较小的Sprite之下,当设置为(0,-1,0)时,则相反。

4. 延迟销毁游戏对象

默认情况下,使用Destroy()方法会立即销毁游戏对象,如果想延迟一段时间再销毁,可在此方法中传递一个时间参数,如下:

Destroy(gameObject,2f);

5. 快速新建基于自定义Shader的材质

在Project面板中选中一个自定义Shader,右键选择新建材质(Create>Material),则材质默认使用的着色器为z之前选择的Shader,同时材质名称为Shader的名称。

6. 脚本不挂载到游戏对象执行

通常情况下,新建的脚本要挂载到游戏对象上才能运行,如果在脚本中的方法前使用[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)],可以不用挂载到任何游戏对象上即可在程序运行时执行此方法,方便在在程序初始化前做一些额外的初始化工作。如下代码所示:

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
public static void DoSomething()
{
Debug.Log("It's the start of the game");
}

7. 保存程序运行时组件属性的改变

在程序运行时改变组件的各属性值,当停止运行后,这些改变将重置为编辑状态下的数值,。程序运行时改变了组件的属性值,可以点击组件右上角的齿轮按钮,选择Copy Component命令,停止播放后,在相同的组件上,执行Paste Component Value,从而能够保存在运行时对该组件做出的改变。

8. 获取一个随机布尔值

我们知道Random.value能够返回0~1之间的随机数,所以让此随机数与0.5f进行比较,就能够获取一个随机的布尔值True或者False,如下代码所示:

bool trueOrFalse = (Random.value > 0.5f);

9. 使用Struct代替Class

如果数据结构仅保存了有限的几个数值变量,可以考虑使用struct代替Class,因为Class实例由垃圾回收机制来保证内存的回收处理;而struct变量使用完后立即自动解除内存分配。

10. Visual Studio 自动语句补全

当使用Visual Studio进行代码编写时,可双击Tab键来辅助完成像if、for、switch等语句的补全。

11.协程嵌套

在一个协程里开启另外一个协程,可使用以下方法:

void Start()
{
StartCoroutine(FirstCo());
} IEnumerator FirstCo()
{
yield return StartCoroutine(SecondCo());
} IEnumerator SecondCo()
{
yield return ;
}

12.脚本变量参与动画制作

使用Animation工具还可以改变脚本的变量。

13/14. Animation窗口快捷键

在Animation窗口中,按下Ctrl+A,所有关键帧将集中显示在窗口中;选择某些关键帧,按下F键,可将它们居中显示在窗口中;按下C键,可以在曲线视图和关键帧视图间切换;按下K键添加关键帧。

15. 反向播放动画

在Animator窗口中,设置动画的Speed属性为-1可使动画片段反向播放。

16.快速比较距离

将两点之间的距离与一个固定距离进行比较时,可使两点相减然后取平方(即sqrMagnitude),然后用该值与某个距离值的平方进行比较。不建议使用Vector3.Distance方法获取两点之间距离,然后与给定的距离值进行比较。因为Vector3.Distance(a,b) 相当于 (a-b).magnitude,即求平方后开根,而sqrMagnitude方法省去了求平方根的操作,所以比magnitude执行快。

建议:

if ((pointA - pointB).sqrMagnitude < dist * dist)
{
}

不建议:

if (Vector3.Distance(pointA, pointB) < dist)
{
}

17. 使用TextMeshPro

使用TextMeshPro能够获得更多的文字控制自由度,并且能够有效防止文字边缘模糊。如下图所示,第一行文字通过"Create > UI > Text"命令创建,第二行文字通过"Create > UI > TextMeshPro - Text"命令创建。

18.在Inspector面板中显示私有变量

将私有变量标记为SerializeField,可在Inspector面板中将其显示。

[SerializeField]
private int myNumber = ;

19. 在Inspector面板中隐藏公有变量

如果不希望在Inspector面板中显示公有变量,可将其标记为[HideInInspector]。

[HideInInspector]
public int myNumber = ;

20. 变量重命名后继续保持值

当变量重命名后,如果希望继续保留其数值,可使用FormerlySerializedAs,如下代码所示:

[FormerlySerializedAs("hp")]
public int myNumber = ;

需要引用命名空间:

using UnityEngine.Serialization;

21.使用文件夹快捷方式

可将经常访问的文件夹的快捷方式拖入Project面板中,双击快捷方式可快速打开此目录。

22/23.F与Shift+F

选择游戏对象,按下F键,可将Scene的视口中央移动到该游戏对象处;按下Shift+F,可将视口与该游戏对象锁定,即无论如何移动游戏对象,视口中央始终跟随此游戏对象。

24.对齐Scene与Game视图

在Hierarchy面板中选择摄像机,按下Ctrl+Shift+F,可将摄像机移动到能够呈现Scene窗口中内容的位置。

25. CompareTag方法

当对游戏对象的Tag进行比对时,从性能考虑,可使用CompareTag方法,不建议使用双等号进行判断。因为CompareTag不需要内存分配以及垃圾回收,而从游戏对象中检索字符串的话,会分配内存并且需要垃圾回收。

建议:

if (gameObject.CompareTag("Enemy"))
{ }

不建议:

if (gameObject.tag == "Enemy")
{ }

26.使用空游戏对象作为分隔符

在Hierarchy面板中,可以使用名称中带有分隔符的空游戏对象进行组织管理。

27. 查找含有某组件的游戏对象

如果需要查找挂载了某个组件的游戏对象,直接在Hierarchy面板的搜索框中输入组件名称即可,需要注意组件名称中的空格,比如搜索”MeshCollider“而不是”Mesh Collider“。

28. 查找某种类型的资源

在Project面板中的搜索框中输入"t:"+资源类型,可以过滤显示某种类型的资源,比如输入"t:scene",会过滤出所有场景文件,输入"t:texture",则会显示所有贴图。

29. 移动代码行

在Visual Studio中,使用快捷键Alt+上下键,可以在代码块中快速上移/下移光标所在的代码行,不用复制粘贴。

30.快速查看组件文档

点击组件右上角的文档按钮,可快速打开关于当前组件的文档。建议下载离线文档,以便更加快速打开文档,如果没有下载,Unity将打开在线文档。

31.文档版本历史

在Unity文档中点击Documentation Version链接,可查看不同版本的文档。

32. 展开/折叠所有节点

在Hierarchy面板中,按下Alt键,鼠标左键点击树形节点,可展开/折叠当前节点下的所有子节点。

33.保存编辑器窗口布局

Unity窗口布局可自定义,调整完毕以后,如果希望以后继续沿用此布局,点击编辑器右上角的Layout下拉列表,选择命令Save Layout,可将当前窗口布局进行保存。

34+35. 改变编辑器颜色

选择命令Editor > Preferences命令,可自定义编辑器当前主题的颜色。

修改Playmode tint的颜色值,可以改变编辑器在运行模式时的颜色,以提醒开发者此时为运行模式。

36.开关场景特效

在Scene面板顶部的图片下拉列表中,可选择开关某种类型的特效。

37.MenuItem属性

要在编辑器的菜单栏中选择执行编写的函数,可在函数前添加MenuItem属性,如下代码所示:

[MenuItem("MyMenu/Do Something")]
static void DoSomething()
{ }

38.ContextMenu

使用ContextMenu属性标记函数,能够在脚本所在的上下文菜单中调用,如下代码所示:

[ContextMenu("Do Something")]
void DoSomething()
{ }

39+40. 隐藏和锁定层

在编辑器右上角的Layers下拉列表中,点击对应层右侧的眼睛按钮,可以隐藏或显示某个层上的对象;点击锁按钮,可对某个层进行锁定或解锁,当被锁定后,该层上的所有对象将不能被选择。

41.层子菜单

当创建层时,使用斜杠符进行路径式命名可以为层添加子菜单,可以更好地组织项目。

42. 使用Scripting Define Symbols定义脚本

在不同的目标平台下添加 Scripting Define Symbols(Project Settings > Player > Scripting Define Symbols),以分号分隔,可以将这些符号像使用Unity内置标签一样用作#if指令的条件。

43+44.颜色

在使用Color控件的滴管工具进行颜色选择时,可以拾取Unity编辑器之外的颜色。

在颜色属性之间也可以使用右键命令进行复制粘贴。

45.最大化窗口

使用快捷键Shift+空格键,可以快速最大化鼠标所在的窗口,而不用选择窗口右上角的Maximize命令。

46. 序列化Struct和Class

在数据类型Struct和Class声明前使用[System.Serializable],可以将其显示在Inspector面板中进行赋值。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour {
public A[] AList;
public B[] BList;
public A a;
public B b;
// Use this for initialization
void Start () {

// Update is called once per frame
void Update () {


[System.Serializable]
public struct A

public int a;
public GameObject b;
public Vector3 c;

public struct B

public int a;
public GameObject b;
public Vector3 c;

可以看到,结构体B的数据无法再面板内显示,而A的则可以显示。

47.碰撞矩阵

在 Edit > Project Settings... > Physics 中,通过设置Layer Collision Matrix 可以决定能够互相碰撞的层。

48.Collider相互作用矩阵

当两个对象发生碰撞时,会发送不同的碰撞事件,如OnTriggerEnter、OnCollisionEnter等等,这取决于具体的碰撞体设置,下表列出了不同类型的碰撞体发生碰撞时所能发出的事件类型。详情可参考Unity 官方文档:https://docs.unity3d.com/Manual/CollidersOverview.html

49. 数值输入

在Inspector面板中涉及到数值输入的字段,不仅可以直接输入数据,还可以在输入框中输入数学表达式,按下回车后Unity会将计算结果填充到输入框中。

50.锁定Inspector

点击Inspector右上角的锁定按钮,或在上下文菜单中选择Lock命令,可以将当前选中游戏对象的Inspector面板锁定。然后选择Add Tab > Inspector命令,添加一个Inspector,这样能够方便在两个游戏对象之间互相拷贝组件数据。

Unity小知识点大全(一)的更多相关文章

  1. Unity小知识点大全(二)

    51.Inspector调试模式 在Inspector面板右上角的下拉菜单中,选择Debug命令,启动调试模式,此时将显示组件包含的所有变量,包括私有变量,当运行编辑器时,可以实时查看各组件所有变量的 ...

  2. 刚接触Linux,菜鸟必备的小知识点(一)

    身为一个将要大四的学生,而且还是学计算机的没有接触过linux简直是羞愧难当.这个假期做了一个软件测试员,必须要熟悉linux的操作,所以对于我这个菜鸟我也就说几点比较重要的小知识点吧. 第一.cd指 ...

  3. Java学习过程中的总结的小知识点(长期更新)

    Java学习过程中的总结的小知识点 (主要是自己不会的知识和容易搞错的东西) 计算某个程序运行的时间 long stime=System.currentTimeMillis(); copy3(file ...

  4. 【转】HTML5的小知识点小集合

    html5的小知识点小集合 html5知识   1.  Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<h ...

  5. AngularJS的小知识点

    小知识点:$scope和$rootScope (1)每次使用ngController指令,都会调用控制器的创建函数,创建出一个控制器对象. (2)每次创建一个控制器对象,AngularJS都会创建一个 ...

  6. 自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药

    自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...

  7. 自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析

    自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...

  8. 自制Unity小游戏TankHero-2D(3)开始玩起来

    自制Unity小游戏TankHero-2D(3)开始玩起来 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的.仅 ...

  9. 自制Unity小游戏TankHero-2D(2)制作敌方坦克

    自制Unity小游戏TankHero-2D(2)制作敌方坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...

随机推荐

  1. H5-设置缓存

    <meta http-equiv="Cache-Control"content="no-cache"/> 手机页面通常在第一次加载后会进行缓存,然后 ...

  2. Oracle 中关于 Group By 子句与多行函数嵌套搭配使用的注意事项

    目录 你需要知道的 啥叫单行函数 啥叫多行函数 如何理解这个概念 Group by 子句使用规则 看一道 071 考题 你需要知道的 提到 Group by 子句,你需要先理解一个东西:函数的分类.提 ...

  3. java - 锁的种类及详解

    锁类型 锁根据其特性能够划分出各种各样的锁类型,该文主要介绍以下锁的作用及特性 乐观锁/悲观锁 独享锁/共享锁 互斥锁/读写锁 可重入锁 公平锁/非公平锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 ...

  4. Vue前端挂载对象时一些思考

    最近,在Vue前端调试http请求,无论如何如何也是拦截不了某些http请求.场景是这样的:Java后端组装好Vue对象,然后送到前端,前端通过id来挂载该Vue对象,而该对象中有上传文件或者图片的控 ...

  5. POJ3723(最小生成树,负权)

    题目描述 温迪有一个国家,他想建立一支军队来保护他的国家.他收留了N个女孩和M个男孩,想把她们收留成他的士兵.征兵无特权,必须交纳一万元.女孩和男孩之间有一些关系,温迪可以利用这些关系来降低他的成本. ...

  6. 2019 LOL 全球总决赛

                                        FPS 牛逼 涅槃重生

  7. JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值

    在.net mvc的controller中,方法返回JsonResult,一般我们这么写:   [HttpPost]   public JsonResult QueryFeature(string u ...

  8. [CF1034A] Two Rabbits - 数学

    判断能否整除即可 #include <bits/stdc++.h> using namespace std; int x,y,a,b; int main() { int t; ios::s ...

  9. [TJOI2013] 攻击装置 - 二分图匹配

    给定 \(N \times N\) 棋盘,某些格子是障碍,问可以放置的互不侵犯的马的个数 黑白染色后建立二分图,求最大独立集 = 总点数 - 最大匹配数 注意把反边也连上会WA掉(脑抽一发血) #in ...

  10. centos 部署 aspnetMVC 网页

    在Linux上运行ASP.NET网站或WebApi的传统步骤是,先安装libgdiplus,再安装mono,然后安装Jexus.在这个过程中,虽然安装Jexus是挺简便的一件事,但是安装mono就相对 ...