变量大小写都无法自动检测出来。
作者存档: 朱坤乾 - 第29页
unity3d awake与start的区别
awake与start的共同点是都只会被调用一次。
awake调用在start之前,所有game object初始化完成后,调用awake,调用顺序是随机的。
所以awake的作用是设置game object之间的关联。
unity3d js优化
1、unity3d中,变量应该使用静态类型,避免使用动态类型,这一点可以提供20倍的效率。
2、为了避免开发人员一不小心使用动态类型,unity3d中提供#pragma strict,用来强制使用静态类型,当使用动态类型时会提供编译错误。
3、缓存已经查找的组件:
例:下面一段代码很普通。
function Update () {
transform.Translate(0, 0, 5);
}
实际上修改一下,可以更高效:
private var myTransform : Transform;
function Awake () {
myTransform = transform;
}
function Update () {
myTransform.Translate(0, 0, 5);
}
这种改动,能压榨出最后一点性能。但这种改动,有时候并不能取到非常明显的效果。这种优化可取也可不取。
4、使用固定长度的数组。
unity3d中arrayList及array拥有可变长度特性,这种特性在游戏中并不是很合适。
unity3d中推荐使用固定长度集合,在开发中基本可以推算出所需要的最大长度。指定长度后,遍历的速度基本是线性的。
5、避免执行不必要的操作。
简单来说,就是如果一个对象,已经不在可视范围之内,附加在该对象上的代码完成没有必要执行。
unity3d提供了3种方式
1)使用OnBecomeVisible()及OnBecomeUnvisible()
function OnBecameVisible () {
enabled = true;
}
function OnBecameInvisible () {
enabled = false;
}
这种方式的缺点是,在某些情况,当对象从屏幕上不可见之后,依旧希望AI继续执行。
2) 使用OnTriggerEnter() 及OnTriggerExit()
function OnTriggerEnter (c : Collider) {
if (c.CompareTag(“Player”))
enabled = true;
}
function OnTriggerExit (c : Collider) {
if (c.CompareTag(“Player”))
enabled = false;
}
这种方式就比较合适一些,当玩家靠近时,才开始进行计算,当玩家远离后,就不会再被执行。
3) 这种就简单了,使用 yield 每次暂停5秒。
unity3d daltaTime
Time.deltaTime是上一次frame完成需要的时间。
也即每次调用时间隔的时间。因为每frame都会被调用一次。
3ds max模型导入unity3d
导入后的文件没有对应的材质。
在网上搜索了一下资料,看到普遍提供的解决方案是在unity3d中自己手动再设置一遍材质。
unity3d js 编辑器
推荐:
http://www.arsoftware.co.uk/products/unityscript-editor
拥有语法提示等功能,比unity3d自带的编辑器强不少。
unicode中的字节顺序标记。
字节顺序标记
您在使用 Unicode 时另一个常出现的概念是字节顺序标记。BOM 用于指示处理器如何将连续文本置于字节序列中。如果将最不重要的字节置于初始位置,这称为 “little-endian”;如果将最重要的字节置于初始位置,此方法称为 “big-endian”。BOM 也可用作识别文本文件编码的参考。例如,记事本根据保存文件时所用的编码,将 BOM 添加到每个文件的开头。此签名将允许记事本在稍后重新打开该文件。表 2 显示了各种编码的字节顺序标记。UTF-8 BOM 标识编码格式而非文档的 BOM – 因为每个字符由一个字节序列表示。
![]() |
表 2:特定编码的字节顺序标记 (U+FEFF) 的二进制表示。 |
0x2029段落分隔符
今天在UMD中看到出现了0x2029这个字符,这个字符是unicode中用来做段落分隔符,平时使用较多的是行分隔符’\n’,在此mark一下。
- 新行(换行)符 ('\n')、
- 后面紧跟新行符的回车符 ("\r\n")、
- 单独的回车符 ('\r')、
- 下一行字符 ('\u0085')、
- 行分隔符 ('\u2028') 或
- 段落分隔符 ('\u2029)。
近期评论