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,因此在脚本间相互调用时,一定要先看一下相应变量在调用时是否已经被初始化。
- Unity中的几个”近义词”
- unity中的几个坑
- unity中的几个Update
- 【小松教你手游开发】【unity实用技能】unity中的几个延时
- Unity 几个插件
- unity gi的几个参数
- Unity Resources的几个方法
- unity几个重要的文件夹!
- 【Unity编程】Unity中的基本概念
- 【Unity】Unity中影响性能的几个因素
- Unity几个有用的游戏运动特效
- Enterprise Library:Unity的几个注意事项
- Unity几个有用的游戏运动特效
- unity 关于碰撞器的几个函数
- unity里的几个控件说明
- Unity 几个物体移动的方法
- unity中Input的几个方法
- Unity GameObject对象的几个重要方法
- Kafka+Spark Streaming+Redis实时计算整合实践
- CAP 可能是CAP理论的最好解释
- RecyclerView的详细使用
- Scrapy 入门学习笔记(2) -- xpath 与 css 解析以及解析网页示例
- 将netcat-openbsd替换成为netcat-traditional
- Unity中的几个”近义词”
- 浅析Android中Drawable(hdpi,ldpi,mdpi)目录的区别
- kickstart无人值守安装
- libevent例子:hello-world
- Torque PBS安装配置过程及问题
- css--样式层叠(选择器优先权)
- sdk manager打不开闪退问题完美解决2017年最新方法
- 算法细节系列(18):凸包的三种计算
- LeetCode (29)Divide Two Integers