Unity小知识点大全(二)

摘要:
57.导入后保留PSD文件的图层结构将PSD文件另存为PSB格式,将其导入Unity后可保留文件图层结构,此时需要在PackageManager中安装2DPSDImporter,并且在文件的导入属性中设置TextureType为Sprite。

51.Inspector调试模式

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

52.高亮显示Debug.Log对应的游戏对象

当使用Debug.Log方法输出信息时,可将gameObject作为此方法的第二个参数,当程序运行时,点击Console面板中对应的输出信息,可在Hierarchy面板中高亮显示挂载了此脚本的游戏对象。

voidStart()
{
    Debug.Log("this is a message",gameObject);
}

Unity小知识点大全(二)第1张

53.风格化Debug.Log的输出信息

当Debug.Log方法的输出消息是字符串时,可以使用富文本标记来强调内容。如下代码所示:

Debug.Log("<color=red>Fatal error:</color> AssetBundle not found");

输出效果:

Unity小知识点大全(二)第2张

54.绘制调试数据

当变量随着时间的推进而改变时,可使用AnimationCurve实例在程序运行时绘制此数据,如下代码所示:

public AnimationCurve plot = newAnimationCurve();
voidUpdate()
{
    float value =Mathf.Sin(Time.time);
    plot.AddKey(Time.realtimeSinceStartup, value);
}

返回Unity编辑器,运行程序,点击plot属性,此时会随着时间动态绘制数据的变化情况,如下图所示:

Unity小知识点大全(二)第3张

55.快速新建脚本并挂载到游戏对象上

选择游戏对象,在Inspector面板上点击Add Component按钮,在搜索框中输入新建的脚本名称并回车,可新建脚本并挂载到目标游戏对象上,双击脚本名称进行脚本编写。

56.导入第三方项目文件

Unity能够读取部分第三方创作工具保存的项目文件,比如Photoshop的PSD,Blender的源文件等,不需要从这些软件导出中转文件格式,比如Jpg、FBX等。

57.导入后保留PSD文件的图层结构

将PSD文件另存为PSB格式,将其导入Unity后可保留文件图层结构,此时需要在Package Manager中安装2D PSD Importer,并且在文件的导入属性中设置Texture Type 为Sprite (2D and UI)。

Unity小知识点大全(二)第4张

58+59.为游戏对象指定/自定义图标

点击游戏对象Inspector面板左上角的下拉菜单,可为游戏对象指定一个特定颜色的标识,这对空游戏对象的可视化也比较有用。点击Other...按钮,可以用自己的图片来进行标识。

Unity小知识点大全(二)第5张

60/61.显示/隐藏Gizmo

点击Scene面板右上角的Gizmo下拉列表,可以选择显示或隐藏某类组件的图标和Gizmo标识;也可点击Game面板右上角的Gizmo按钮,显示或隐藏所有资源的图标和Gizmo。

Unity小知识点大全(二)第6张

62.字符串拼接

可使用StringBuilder进行字符串的拼接,不要使用字符串相加的形式,因为这样会带来额外的内存垃圾。如下代码所示:

StringBuilder myStr = newStringBuilder();
myStr.Append("Hello").Append("The").Append("World");

不建议:

string myStr = "Hello" + "the" + "world";

使用StringBuilder需要引用命名空间System.Text。

63.使用ScriptableObjects管理游戏数据

对于游戏数据比如武器、成就等,可使用ScriptableObjects在编辑器中进行有效组织。如下代码所示:

usingUnityEngine;

[CreateAssetMenu(fileName = "New Item", menuName = "Item")]
public classNewBehaviourScript : ScriptableObject
{
    public stringItemName;
    public intItemLevel;
    publicTexture2D ItemIcon;
}

Unity小知识点大全(二)第7张

64.编辑器播放时修改脚本后的处理

选择 Edit > Preferences > General 命令,在Script Changes While Playing中,可以设置编辑器在播放状态下如果脚本发生改变后的处理,比如停止播放重新编译等。

Unity小知识点大全(二)第8张

65.自定义窗口

将类继承自EditorWindow,可以添加自定义窗口,在此基础上编写一些命令和工具,如下代码所示:

usingUnityEngine;
usingUnityEditor;

public classExampleWindow : EditorWindow
{
    [MenuItem("Window/Example")]
    public static voidShowWindow()
    {
        GetWindow<ExampleWindow>("Example");
    }
}

执行效果:

Unity小知识点大全(二)第9张

Unity小知识点大全(二)第10张

66.自定义Inspector

也可对Inspector进行自定义,添加一些控件。如下代码所示:

usingUnityEngine;
usingUnityEditor;

[CustomEditor(typeof(Sphere))]
public classSphereEditor : Editor
{
    public override voidOnInspectorGUI()
    {
        GUILayout.Label("自定义Inspector");
        GUILayout.Button("确定");
    }
}

执行效果:

Unity小知识点大全(二)第11张

67.工具快捷键

使用快捷键Q、W、E、R、T、Y切换移动、旋转、缩放等工具。

68.使用RectTransform工具缩放3D物体

RectTransform工具一般用于缩放2D物体,对3D物体使用该工具可以在某个二维平面对其进行缩放,这取决于物体与视口的关系。

69+70+71.吸附

按下Ctrl键对游戏对象进行移动、旋转、缩放,将以步进的形式进行操作,选择Editor > Snap Settings...命令,可设置步进大小。

Unity小知识点大全(二)第12张

按下V键,在游戏对象上选择顶点进行拖放,将以此顶点为基础,把游戏对象吸附到其它顶点的位置。

72. 管理程序集

在Project面板中选择Create > Assembly Definition 命令,创建程序集文件,然后将其拖放到指定的文件夹中,定义脚本依赖关系,可以确保脚本更改后,只会重新生成必需的程序集,从而减少编译时间。

73.WaitForSecondsRealtime

当时间缩放为0时(即Time.timeScale=0f),waitForSeconds方法将不会停止等待,后续代码也不会执行,此时可使用WaitForSecondsRealtime方法,如下代码所示:

Time.timeScale =0f;
yield return new WaitForSecondsRealtime(1f);

74+75.缓存组件引用

当某组件需要被频繁访问时,可在初始化时预先获取该组件的引用,从而避免在访问时由于重复获取引起的性能开销。

privateRigidbody rb;

voidStart()
{
    rb = GetComponent<Rigidbody>();
}

voidUpdate()
{
    rb.AddForce(0f, -2f, 0f);
}

同样的情况,也不要在使用Camera.main获取摄像机组件,尤其避免使用类似以下方法:

Camera cam = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();

这样会带来更大的性能消耗。

76.字符串性能优化

如果某字符串在整个应用过程中不会改变且被频繁使用,可将其存储在静态只读变量中,从而节省内存分配,如下代码所示:

static readonly string Fire1 = "Fire1";

voidUpdate()
{
    Input.GetAxis(Fire1);
}

不建议:

voidUpdate()
{
    Input.GetAxis("Fire1");
}

77/78/79/80.方便使用的元数据

为变量添加一些属性可使它们在Inspector面板中更容易被使用。在变量前添加Range属性可将其限定在某个范围内使用滑块进行调节,如下代码所示:

[Range(0f,10f)]
public float speed = 1f;

执行效果:

Unity小知识点大全(二)第13张

两个变量声明之间加入[Space]可在Inspector中添加一个空行;添加Header可在Inspector面板中加入一段文字,如下代码所示:

[Header("Player Settings")]
public float speed =1f;
public int size = 10;

执行效果:

Unity小知识点大全(二)第14张

在变量前加入Tooltip,当鼠标悬停在Inspector面板中的变量上时,可显示关于此变量的说明,如下代码所示:

[Tooltip("移动速度")]
public float speed = 1f;

执行效果:

Unity小知识点大全(二)第15张

82.合并场景

在Project面板中,将一个场景文件拖到另外一个上,可将场景进行合并。

83/84.创建游戏对象/数组元素副本快捷键

选择一个游戏对象,使用快捷键Ctrl+D可快速创建该游戏对象的副本,同样的方法可创建数组元素的副本。

85.组件预设

当完成某个组件的属性设置后,可点击组件右上角的预设按钮,将当前属性设置保存为预设,方便后续进行组件设置时使用。

Unity小知识点大全(二)第16张

86.遍历游戏对象所有子物体

可使用foreach循环遍历游戏对象的所有子物体,如下代码所示:

foreach (Transform child intransform)
{
    Debug.Log(child.name);
}

87.通过脚本改变游戏对象在Hierarchy中的顺序

使用transform.SetSiblingIndex方法可以设置游戏对象在Hierarchy面板中的顺序,如下代码所示:

transform.SetSiblingIndex(1);

以上代码实现在游戏运行时,设置游戏对象在Hierarchy面板中的顺序为同级节点中的第二个。

88.保存选择状态

当选择了多个游戏对象后,可在 Edit > Selection 的子菜单中选择一个Save Selection项,暂存当前选择状态。选择Load Selection+对应的序号,即可恢复某个选择状态。此方法对跨节点选择多个对象的情况非常适用,这样将不必依次展开节点重新进行查找选择。

Unity小知识点大全(二)第17张

89.#region 和 #endregion

使用#region 和 #endregion可以将两者之间包含的代码折叠,方便阅读。

Unity小知识点大全(二)第18张

90.通过脚本暂定编辑器播放

使用EditorApplication.isPaused可通过代码在编辑器播放时将其暂停,如下代码所示:

voidUpdate()
{
    if (Time.time >=10f)
    {
        EditorApplication.isPaused = true;
    }
}

需要引用命名空间UnityEditor。

91.逐帧查看程序运行

点击暂停按钮右侧的步进(Step)按钮,可以在程序运行时逐帧查看程序运行状态。

Unity小知识点大全(二)第19张

92/93/94.查看游戏性能统计

点击Game窗口右上角的Stats按钮可以查看游戏性能统计数据,如帧率、批处理等指标。

Unity小知识点大全(二)第20张

查看更加详细的分析数据,可使用Window > Analysis > Profiler工具;使用Profiler.BeginSample和Profiler.EndSample方法可在Profiler中查看函数的资源使用情况,如下代码所示:

Profiler.BeginSample("expensive");
CalculateSomething();
Profiler.EndSample();

需要引入UnityEngine.Profiling命名空间。

Unity小知识点大全(二)第21张

95.弹出预览窗口

通常情况下,项目资源在Inspector面板底部均有一个预览窗口。鼠标右键点击预览窗口顶部,可将该窗口弹出,作为独立窗口,放置在编辑器的任意位置。

Unity小知识点大全(二)第22张

96.测试游戏时静音

点击Game窗口右上角的Mute Audio按钮,可在编辑器播放时将所有声音关闭。

97.InvokeRepeating方法

InvokeRepeating能够按照一定的时间间隔反复执行某个函数,若不使用CancelInvoke方法,InvokeRepeating将持续执行,即使将方法所在的脚本关闭。

98.Frame Debugger

使用Frame Debugger(Window > Analysis > Frame Debugger)可以查看每一帧的渲染过程。

99.Physics Debugger

使用Physics Debugger(Window > Analysis > Physics Debugger)可以查看碰撞引起的异常,当开启Collision Geometry选项后,场景中所有游戏对象的碰撞体都将被绘制出来,而不用依次选择游戏对象进行检查。如下图所示,球体因为添加了不正确的Box Collider,在物理碰撞时必然不能达到预期的表现效果。

Unity小知识点大全(二)第23张

免责声明:文章转载自《Unity小知识点大全(二)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇node.js安装环境的检查和配置QT显示如何减轻闪屏(双缓冲和NoErase)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java 8:掌握 Lambda 表达式

本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并对 Lambda 表达式的原理进行分析,最后对 Lambda 表达式的优缺点进行一个总结。 ​ 1. 概述 Java 8 引入的 Lambda 表达式的主要作用就是简化部分匿名内部类的写法。 能够使用 Lambda 表达式的一个重要依据是必须...

【转】Android世界的Swift

最近Oracle又在和Google撕的厉害,才知道还有这么Kotlin在Android像Swift在Mac的地位一说。 Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以...

使用Unity实现VR中在黑板上写字(初级篇)

一、工具 1.开发用的是Unity 5.6.2版本 2.VR中的物理交互用的是VRTK插件,这个插件集成了比较好的物理交互功能; 3.HTC Vive 二、概述 实现的功能: 在一个白板上,用不同颜色的笔,在白板画出任何想要的图形; 因为只是一个初级篇所以只是用两个脚本简单的实现,而且并没有黑板擦等功能 ,也不能两个笔同时画画,这些功能将会在未来的升级篇...

Java中的Static详解

static对象和static方法都属于类的成员,他们不属于类的任何实例,被所有实例共享。static语句块又叫“静态代码块”,当JVM加载类时会自动执行static语句中的代码。  1. static对象​ 根据是否由static修饰,对象分为: 静态变量和 实例变量。 对于静态变量,在JVM加载类的时候就为它分配内存,是第一次也是唯一一次对它分配内存部...

SPSS基础知识

3.1 数据的输入和保存 1. 打开SPSS后,界面包括变量视图和数据视图。 变量视图,用于对变量进行设置,数据视图为用户输入的数据。 2. SPSS有大量的函数调用功能进行数据分析 常用的数据分析包括比较均值、一般线性模型、广义线性模型、回归分析、相关分析、神经网络、分类和降维(适用于经济学、评价因子值和得分计算等问题)等等。 3.2 SPSS图形绘制...

IL 汇编学习笔记(一)

今天我开始了 IL 汇编语言的学习,下面都是对一篇文章学习过程的翻译和摘要。原文:http://www.codeproject.com/dotnet/ilassembly.asp先从一个 HelloWorld 例子开始: //Test.IL//Asimpleprogrammewhichprintsastringontheconsole.assemblyex...