Unity中的几个”近义词”

最近整理并研究了一些平时是学习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 initialization
void Start()
{
    testObject = new GameObject();
    for (int num = 0; num < 50; num++)
    {
        list.Add(num);
    }
}

// Update is called once per frame
void 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 initialization
void Start()
{
    print("Start");
}

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

}

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值