1.在使用Canvas中布局组件是得不到修改该后的效果
///官方解释: ///强制所有画布更新其内容。 ///画布在帧末尾、即将渲染前执行其布局和内容生成计算,以确保计算基于该帧期间可能发生的所有最新更改。也就是说,在 Start 回调和第一个 Update 回调中,画布下的布局和内容可能不是最新的。 ///依赖于最新布局或内容的代码可以调用该方法,以确保它在依赖它的代码前执行。 Canvas.ForceUpdateCanvases() //强制刷新Canvas页面
2.判断对象为空使用其他方式进行优化 参考内容
///普通使用
if (gameObject == null)
{}
///使用优化方法
if (System.Object.ReferenceEquals(gameObject, null))
{}
3.判断对象的标签不使用 “ . ” 来点出Tag()
///普通使用 Gameobject.tag() ///使用优化方法 Gameobject.CompareTag()
4.在性能不敏感的时期主动出发垃圾回收(System.GC.Collect方法),比如在切换场景,暂停游戏时等。
System.GC.Collect()
5.World Canvas
为World Canvas指定一个Camera,否则它会每帧都执行Camera.Main,而Camera.Main会持续调用Gameobj.Find方法
6.UnityObject的InstanceID
必要情况下,在Dictionary的键中,我们要缓存Unity对象时,使用UnityObject的InstanceID来作为字典的键,而不是直接使用Object的引用。
7.比较
==它是比较的栈里面的值是否相等(值比较) Equals它比较的是堆里面的值是否相等(引用地址值比较) Object.ReferenceEquals(obj1,obj2)它是比较的是内存地址是否相等
8.颜色编码和Color之间的转换。待验证
Color color = ColorUtility.ToHtmlStringRGB(strcolor);
private Color GetColor(string colorcode)
{
Color color;
StringBuilder sb = new StringBuilder("#");
sb.Append(colorcode);
ColorUtility.TryParseHtmlString(sb.ToString(), out color);
return color;
}
9.在计算向量夹角时总是会得到0~180内 ,参考内容
////// Determine the signed angle between two vectors, with normal 'n' /// as the rotation axis. /// public static float AngleSigned(Vector3 v1, Vector3 v2, Vector3 n) { return Mathf.Atan2( Vector3.Dot(n, Vector3.Cross(v1, v2)), Vector3.Dot(v1, v2)) * Mathf.Rad2Deg; }
10.在使用Video Player和Audio Source 时没有声音,重置DSP设置为此状态。
>Project Settings>>Audio" />



