Unity中的几个”近义词”

来源:互联网 发布:旺旺聊天软件下载 编辑:程序博客网 时间:2024/04/28 12:37

最近整理并研究了一些平时是学习Unity容易混淆的函数,来和大家分享一下!
Vector3.forward&transform.forward
翻看Unity圣典中的解释
Vector3.forward:写Vector3(0,0,1)的简码。也就是Z轴
transform.forward:在世界空间坐标变换的蓝色轴,也就是Z轴
通过字面意思我们可以知道,Vector3.forward在世界坐标系中表示世界坐标系的Z轴,在本地坐标系中表示本地坐标的Z轴,且模的长度都为1。那么当物体平移时,坐标系选择不同方向也不同:
transform.Translate(Vector3.forward * Time.deltaTime, Space.Self);此时按照自身坐标的Z轴方向前进
transform.Translate(Vector3.forward * Time.deltaTime, Space.World);此时按照世界坐标的Z轴前进
transform.forward则始终表示自身坐标的Z轴只是当坐标系为世界坐标时,他在Z轴的模不一定为1,而是自身Z轴在世界坐标系Z州的投影,所以:
transform.Translate(transform.forward * Time.deltaTime, Space.World);此时按照自身坐标的Z轴方向前进
transform.Translate(transform.forward * Time.deltaTime, Space.Self);此时移动的方向与自身Z轴的夹角为自身Z轴和世界坐标系Z轴的夹角(所以金莲骨妖这么用,因为他会将坐标系进行两次转化)
for和foreach
很久之前就从网上知道foreach会造成内存产生垃圾,影响性能,并且对此深信不疑,知道最近自己去尝试了才发现事实并非如此。。。
首先写一个简单的测试脚本,for和foreach条件一样。
public class ForForeach : MonoBehaviour
{

float timer1 = 0;float timer2 = 0;List<int> list = new List<int>();public static GameObject testObject;void Awake(){    //testObject = new GameObject();}// Use this for initializationvoid Start(){    testObject = new GameObject();    for (int num = 0; num < 50; num++)    {        list.Add(num);    }}// Update is called once per framevoid Update(){    for (int i = 0; i < list.Count; i++)    {    }    //foreach (var item in list)    //{    //}}

}
依次运行for和foreach所在代码,打开性能分析器
for:
这里写图片描述
foreach:
这里写图片描述
两者都没有产生内存垃圾!于是我又看了几篇文章发现这是几年前讨论的一个话题,而且他们用的都是unity自带的Mono编译器,他在编译过程中foreach会有一个装箱操作,正是这一点导致了foreach产生了垃圾,而对于VS编译产生的DLL文件则并不会产生,而且之后的版本unity对Mono编译器进行了优化,他在运行foreach也不会产生内存垃圾了。所以得出了结论:至少在是否产生垃圾从而影响性能这一点上,两者都并不会如此。
Awake和Start
awake和start的区别相信很多人都知道,awake值创建MonoBehavior之后调用,而start在MonoBehavior创建之后调用Update之前调用,也就是说当脚本被关在到物体上之后,及时脚本被禁用也会执行Awake也会执行
public class AwakeStart : MonoBehaviour {

void Awake(){    print("Awake");    this.enabled = false;}// Use this for initializationvoid Start(){    print("Start");}// Update is called once per framevoid Update () {}

}

对于上述代码会输出Awake而不会输出Start,因此在脚本间相互调用时,一定要先看一下相应变量在调用时是否已经被初始化。

原创粉丝点击