前言:本文主要供自己参考,如果错误欢迎指正。本文并非系统的知识点总结,而对零散知识点的补充说明。
官方文档:Unity 脚本 API
需要Inspector窗口中重新赋值。
修改动画使用的函数的函数名时,需要在对应的动画中重新绑定该函数。
基本上需要重新选择。
例如,我在某个脚本中声明了一个序列化的Options类型的变量,并勾选了Option2这个项。那么当我修改Options后option2仍存在且值不变时,在Inspector窗口中保存的枚举变量的枚举项才不会改变。
public enum Options
{
option1,
option2,
}
字母、数字、下划线、空格:空格不要连续,末尾不要使用空格。
中文及其它符号:慎用。
(Hierarchy窗口中的对象命名同上)
VS有时候会自动包含头文件,这有可能导致包包含错误的头文件,使用VS自动补全了错误的代码后应该撤回而非删除。另外,看到未使用的头文件应该删除。
vector既可以表示3D世界中的坐标(点),也可以表示3D世界中的位置变化(向量)。
一般来说,用vector表示方向时最好使用单位向量(长度为1)。
射线检测时,可以用QueryTriggerInteraction.Ignore忽略触发器检测。
// 不public协程方法, 而是public开启协程的方法
// 这样开启的协程都在该behaviour上,便于管理
// 例如,脚本A调用脚本B上的Start_Function(),
// 则会在脚本B上开启一个协程Function()
IEnumerator Function() {}
public void Start_Function()
{
StartCoroutine(Function());
}
不要为不同的State取相同的名称!!!不同层的同名State并不是同一个State!
例如,我们在第0层和第1层都有一个名为
若我们在第1层中有一个名为
但正如前面所说,这会导致实现上的错误,即第1层仍处于
另外,如下所示,这两个语句在同一个语句块中时,并不会出现所谓的“覆盖”,而是依次执行这两个语句。
animator.Play("Falling");
// 执行一系列操作
animator.Play("Empty"); // 想返回"Empty"状态。
【代码控制过渡】 vs 【Animator窗口中的参数控制过渡】
使用Animator窗口中的参数来控制过渡,还是使用Animator.Play()与Animator.CrossFade()来控制动画过渡呢?代码可以直接开始过渡(切换或混合);而Animator会等到Exit Time判断过渡条件是否都为true,若过渡条件都为true才会开始过渡。无需附加条件的过渡我会选择使用Animator窗口中的箭头过渡,需要附加条件的过渡我会选择使用代码控制(除非不能立马打断当前动画)。
不要用Ctrl+z撤回UI操作,可能导致Unity崩溃。
canvas的渲染顺序:
① 先判断canvas的渲染模式:Screen Space - Overlay肯定比另外两种后渲染。
② (若①无法得出结果,比较对应camera的depth,越大越后渲染。)
③ (若②无法得出结果,比较sortingLayer,越大越后渲染。)
④ 若①(或③)无法得出结果,比较SortOrder,越大越后渲染。
⑤ 若④无法得出结果,比较在Hierarchy窗口中的位置,下面的后渲染。
其中,两个canvas渲染模式都为Screen Space - Overlay时,跳过②③步骤。
// 1.Screen Space - Camera && World Space
// (1)对应camera中的depth
// (1)Sorting Layer
// (2)Sort Order
// (3)Hierarchy窗口中的顺序
// 2.Screen Space - Overlay(将UI渲染在屏幕最前面)
// (1)Sort Order
// (2)Hierarchy窗口中的顺序
canvas中的UI渲染顺序:比较在Hierarchy窗口中的位置。
设置内容为网格布局:Layout group
根据内容的大小设置该UI的大小:Content Size Fitter
设置该UI的弹性大小:Layout Element
宽高比适配器:Aspect Ratio Fitter
Input System | Input System | 1.4.4 (unity3d.com)
[Header]【标题】:后面紧跟的变量必须序列化。(不能是const或static变量,可能是const或者static无法被序列化?)
[SerializeField]【序列化】:主要是为了让private或protected变量在Inspector窗口中显示。
[HideInInspector]【在Inspector窗口隐藏】:主要是为了让public变量在Inspector窗口中隐藏。
[CreateAssetMenu]【创建资产菜单】:可以快速创建继承自ScriptableObject的派生类的实例。
[Range]【范围】([min]【最小值):限制数值变量的范围。
[TextRrea]【文本域】
[Tooltip]【提示】:在Inspector窗口中,鼠标悬停至该变量名上时会显示提示。
[Space]【行间距】:让Inspector窗口中的排版更加清晰。
注意:尽量不要让两个特性挨在一起,会降低代码可读性。若是含义相近的特性挨在一起可能导致其中一个特性失效。示例,如下。
[Header("item在Hierarchy窗口中的名称")]
[Tooltip("用于切换模型")] public string transformName;
[Header("盔甲的伤害吸收率")]
[Range(0, 1)] public float headArmorPDA;
[Range(0, 1)] public float torsoArmorPDA;
[Space(5)]
[Range(0, 1)] public float headArmorFDA;
[Range(0, 1)] public float torsoArmorFDA;