[笔记]50 tips for unity

[笔记]50 tips for unity

原文链接 http://devmag.org.za/2012/07/12/50-tips-for-working-with-unity-best-practices/

Tips

  1. 避免分歧资源拷贝或备份资源使用 __ 等明显标志
  2. 保留版本副本
  3. 考虑使用额外工具编辑?
  4. 考虑使用XML格式存储关卡(AssetBundles?)
  5. 编写通用检查代码
  6. 使用空GameObject作为目录
    不要将mesh作为脚本的根组件可使用空gameobject
  7. 放置维护资源或目录于(0,0,0)坐标
  8. 尽量减少GUI偏移量
  9. world_floor_y=0
  10. 保证每个子场景scene可单独运行方便调试
  11. 人物(或站立的object)轴放置于底部
  12. 所有mesh的正面面向±z轴
  13. scale初始即正确
  14. 制作一个用于GUI组件和手动创建粒子的双多边形平面?
  15. 美术测试
  16. 万物皆prefab方便更改属性,方便调试,场景运行时也可保存更改
  17. 将特例化的物件包装为prefab而不是实例例两个enemy仅属性不同,一个prefab
  18. 链接prefab而不是实例将prefab拖动到场景时链接的实例将失效
  19. 尽可能在实例间自动建立链接程序化建立实例之间的链接关系
  20. 使用安全的流程分支prefab(备份)
  21. 扩建自用mono behaviour作为所有组件的base?
  22. 为Invoke,协程,实例化定义安全方法
  23. 使用扩展与共享接口的组件一起工作?
  24. 添加扩展使语法更方便
  25. 安全getcomponents
T GetSafeComponent<T>(this GameObject obj) where T : MonoBehaviour {
	T comp = obj.GetComponent<T>();
	if(comp == null) {
		Debug.LogError("GetSafeComponent "+typeof(T)+" is null",obj);
	}
	return comp;
}
  1. 同一件事避免使用不同的常用名
  2. 维护自己的Time类?
  3. 不要让clone物件打乱层级结构
  4. 使用单例模式
  5. 当你不想编辑窗口改变变量时不要用public(使用[HideInspector])
  6. 从游戏逻辑中分离接口函数接口(组件独立化 功能细分)
  7. 分离状态和记录???bookkeeping
  8. 分离专业化配置(模板 子类)
public class EnemyTemplate {
   ...
}
public class WeakEnemyTemplate : EnemyTemplate {
   ...
}
public class StrongEnemyTemplate : EnemyTemplate {
   ...
}
public class Enemy <TemplateType> where TemplateType : EnemyTemplate {
   TemplateType enemy;
   ...
}
public class WeakEnemy : Enemy <WeakEnemyTemplate> {
   ...
}
public class StrongEnemy : Enemy <StrongEnemyTemplate> {
   ...
}
  1. 除了显示文本 不要使用字符串
  2. 避免使用公共索引耦合的数组
//代码没问题 但是不便于管理
currentWeaponIndex = index;
SwitchWeapon(weapons[currentWeapon]);
Fire(bullets[currentWeapon]);
FireParticles(particles[currentWeapon]);  
//封装
public class Weapon
{
   public GameObject prefab;
   public ParticleSystem particles;
   public Bullet bullet;
}
  1. 避免将数组用于序列以外的结构
  2. 将数据序列化分装到类中使编辑窗口看起来更整洁
  3. 如果有大量文本,将文本存入文件中
  4. ?
  5. 实现图形化工具调试物理 动画 AI
  6. 实现一个HTML日志记录器
  7. 实现一个fps记录器
  8. 实现屏幕快照快捷方式
  9. 实现打印玩家位置信息快捷方式
  10. 实现调试选项
  11. 维护一个拥有所有组件的场景
  12. 调试快捷键
  13. 记录更新
  14. 遵循文档命名规范和结构格式

优化

  1. 缓存组件
#if 0
void Update() {
 	//每次调用都会getcomponent<transform>()
	transform.Translate(0, 0, 5);
}
#else
//缓存component
Transform thisTransform;
public new Transform transform {
    get {
        if (thisTransform == null) {
            thisTransform = base.transform;
        return thisTransform;
    }
}
void Update() {
	transform.Translate(0, 0, 5);
}
#endif
  1. 使用内置变量
    eg. Vector.zero
  2. 不需要时可禁用组件物体
    eg. 使用Trigger控制组件开关
  3. 使用 enum.GetName() 代替 enum.ToString()
  4. 类型转换时,使用 as type 代替以类型作为前缀
  5. 不使用 GameObject.Find 而是使用一个 SerializeField 并将组件拖动到相应位置上
  6. 使用 OnBecameVisible 和 OnBecameInvisible
  7. 不要抛出异常(发布代码中)
  8. foreach导致内存泄漏(Unity5.5 Mono4.4 修复)
  9. 动态创建texture或mesh标记HideFlags.DontSave
  10. Debug.Break() 调试时关键帧暂停游戏
  11. 避免使用string
  12. 使用struct(栈区)
  13. 用结构体替换范围绑定的固定大小数组
  14. 避免使用IEnumerable扩展方法
  15. 尽量少使用函数指针
  16. 小心材质拷贝 使用myRenderer.sharedMaterial获取材质(如果不进行改动的化)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值