转战 Unity3d,从玩游戏到开发游戏,这感觉真棒!
文 / 丁建雄
图 / Adnan Bubalo
小白是单纯为兴趣而写作的独立创作人,如果您喜欢小白的文章,欢迎关注、交流、分享(引用请链接到本文)。
- 定义浮点数
float myNumber = 1.2f;
默认情况小数采用 double
类型,需要使用浮点数则需要在末尾加上f。
- C# 对大小写敏感!
- 常量声明:
const int constNum = 2;
readonly int readonlyNum = 2;
这两种形态都可以。
- 关于
foreach
的使用思考:
对于流程控制、循环这一类使用都有其具体适用情况。传统的if.. else,用于选择结构,而衍生出的swich.. case,用于多选结构;while用于只知道结束标志,而不知道初始状态的循环;for用于明确知道开始和结束的循环;而foreach用于完整遍历,在C++中通常会使用vector方法寻找遍历的起点和终点,然后使用for进行循环。因此,foreach其实是一种复合结构,其在运算展开过程中进行了多步操作,具体而言:
foreach会将迭代器转换为IEnumerator。如果迭代器是引用类型,自然会分配在托管堆上;如果是值类型,值类型转换到接口类型是要装箱(boxing)的,需要在托管堆上分配内存并将数据拷贝过去,这样就会带来额外的内存开销,每帧约40B。
因此,性能开销主要是额外的内存开销,效率几乎没有差别。如果不是每帧都更新,同等情况下用foreach或许更方便。而且这个只是在老版本的mono编译器上的小BUG,使用新版VS编译器,就能彻底解决内存开销问题。关于这一问题的具体讨论,参照这篇博客:https://blog.csdn.net/crazygougou/article/details/47450923。
以及知乎上的讨论帖:https://www.zhihu.com/question/30334270。
- C#中,类名称和文件名称要保持一致。
- 默认的属性访问修饰符是private。
- 只有继承Monobehaviour的脚本才能使用unity提供的API。
- unity中的三个Update详解:
update在每一帧调用一次,作用时间与帧率有关;FixedUpdate每一帧调用一次,但是其作用时间是固定的物理时间间隔,与帧率无关,常用于物理模型的更新;LateUpdate每一帧调用一次,与帧率有关,但是其总是在所有Update调用结束之后再调用,常用于相机的视角跟随。
参考博客:https://www.cnblogs.com/qiaogaojian/p/5969968.html。 - Start() 函数作用是在游戏的第一帧前调用,作为游戏初始化准备。
- unity 脚本生命周期与执行顺序参考:https://docs.unity3d.com/Manual/ExecutionOrder.html。
结束语
开始学习Unity,主攻Unity3d AR 应用开发。将零散的知识组合成系统的知识网络,并达到灵活运用的程度,这其实也是对学习模式的一种探索。这个过程,收获多多,感悟多多。最重要的还是对感兴趣的事情的探索热情,热情不减,青春常在,哈哈 ~