2015-12-04 09:00:33 来源: CocoaChina 跟贴 0 条 手机看新闻

文/瀚阳

以下总结一部分来自经验之谈,一部分来自其他人的分享。总的来讲,Unity开发原型和效果、验证想法,确实是无比便利。可能一个月就把核心玩法做得差不多。强大的编辑器功能让我们也有很大的可扩展空间来协助我们开发工具。可是编辑器是把双刃剑。如果提前看清楚有什么坑在前面,或者其他人踩过什么坑。我想这会对项目风险的把控会有很大帮助。

避开unity的坑

1.制作抽象的prefab来做关卡编辑

尽可能制作抽象的prefab来做关卡编辑,该prefab应该足够抽象简单(只有一个GameObject,然后通过Gizmo来绘制是个不错的手段),否则以后变化的时候(常见的就是改美术资源),所有关卡都lost prefab,那么对策划来说是一场灾难。可以考虑通过数据表+编辑器的方式来提供策划操作同时也不再需要担心lost prefab的问题。prefab越简单抽象越不容易丢失,prefab之间嵌套的正确方式是通过链接而不是挂在节点下面。

2.尽可能避免修改Scene,方法有几种:

  • 使用xml之类的数据组织场景

    尽量多让scene由prefab组成,这样变动都在prefab上

    使用工具做场景Merge

3.不要过度依赖Component特性来开发,考虑数据驱动。

4.逻辑容易散落在编辑器各处,可以做一个中心管理。

利用Unity的特性

  • 组织好hierarchy,不管是编辑的时候还是运行的时候,编辑的时候可以通过工具来简化组织层级的工作。

    让每个场景自己能跑。

    利用基于组件的架构,尽可能少的使用继承(用C#的话),多通过组合来完成开发。遇到需要数据访问的通用接口,我们可以通过组合的方式来完成,而不是提供一个公共基类接口来继承,只要大家都认识这个公共组件就可以取到数据了。遇到通用的事件派发,我们可以用字符串拼接的方式派发到指定的对象或者更参数组合派发事件到对象身上。

    框架采用星型架构+事件机制,由于Unity3D没有一个所谓的入口函数,不利于代码跟踪,这样的基础架构能带来很多便利。

    unity界面扩展能力很强,而且借助CLR(commom language runtime)的反射能力,C#里面开发界面非常容易。

    做好tag、layer规划,要考虑业务中哪类物体之间需要交互。

    在代码里面get某个prefab或者GameObject,可以考虑利用界面拖目标过来,这样更加直观,而且也能对抗变化,比如目标名字变了也不怕,而且还能节省代码量。

代码

这里针对C#,静态强类型面向对象本身就是一个坑,继承带着两个职责,一个是复用代码,一个是接口继承。虽然性能比lua高那么一丢丢,因为性能瓶颈不在业务本身,设计上的问题要严重得多。我认为像lua这种动态语言的元编程才能够贯彻单点真理,通过元编程把真理推导到系统的每一处。让代码始终保持语义,而我认为写业务代码最重要的是保持语义。保持语义的简单有效评判方法就是看这个类中的某个函数,单独看它能否看懂;多个接口能否组成完备的解决方案。静态强类型面向对象语言比较适合需求稳定的严谨的系统开发,而不是游戏开发。容易经过多次的策划需求冲刷,语义很容易扭曲,各种抽象泄露、各种hack。好吧,跑题了。

  • Unity3D容易被破解,因为发布版本的IL是非常容易被反编译的,要做好混淆的考虑。在Unity3D中混淆要考虑对编辑器的影响。

    复杂类型尽量使用引用类型,值类型反射麻烦,不方便序列化以及做成编辑器。值类型要小心赋值对象是否只是临时对象。

    引用类型释放之后,引用它的指针会置为null,可以放心使用。

    foreach、linq、协程慎用,反射只在编辑器中使用。

    考虑封装Time,方便做暂停。

    考虑使用调度器来完成功能,而不是在Update自己维护状态,这样做暂停也很容易,代码更清晰,功能更内聚。

    增量更新要一开始就想清楚。

美术

  • Unity3D可以通过扩展编辑器让非技术人员编辑界面来工作,组织好美术资源规格、路径,并且自动生成prefab。游戏场景物件也要规划好逻辑节点,这个也应该通过编辑器扩展好。复杂功能也应该通过编辑器开发给策划微调,特别是可视化比较重要的模块,比如动作调整。

    制作原型美术,让开发提升开发效率。

    有统一的约定,比如模型总是中心对齐,角色总是脚部对齐,统一的缩放、统一的动画骨骼命名,资源有统一的路径。

    支持换装(avatar)要一开始就想清楚。

    资源加载和优化尽可能早地给出雏形(只是雏形,帮助你对需求的把握,因为这时候你还不知道热点在哪),因为一旦没有规划好异步和资源释放,那么阻塞卡顿和内存飙升那是意料之内的。因为有雏形,那么代码会间接一点,也为改变提供了空间。

(本文来源:CocoaChina ) 

2015-12-04 09:00:33 来源: CocoaChina 跟贴 0 条 手机看新闻

文/瀚阳

以下总结一部分来自经验之谈,一部分来自其他人的分享。总的来讲,Unity开发原型和效果、验证想法,确实是无比便利。可能一个月就把核心玩法做得差不多。强大的编辑器功能让我们也有很大的可扩展空间来协助我们开发工具。可是编辑器是把双刃剑。如果提前看清楚有什么坑在前面,或者其他人踩过什么坑。我想这会对项目风险的把控会有很大帮助。

避开unity的坑

1.制作抽象的prefab来做关卡编辑

尽可能制作抽象的prefab来做关卡编辑,该prefab应该足够抽象简单(只有一个GameObject,然后通过Gizmo来绘制是个不错的手段),否则以后变化的时候(常见的就是改美术资源),所有关卡都lost prefab,那么对策划来说是一场灾难。可以考虑通过数据表+编辑器的方式来提供策划操作同时也不再需要担心lost prefab的问题。prefab越简单抽象越不容易丢失,prefab之间嵌套的正确方式是通过链接而不是挂在节点下面。

2.尽可能避免修改Scene,方法有几种:

  • 使用xml之类的数据组织场景

    尽量多让scene由prefab组成,这样变动都在prefab上

    使用工具做场景Merge

3.不要过度依赖Component特性来开发,考虑数据驱动。

4.逻辑容易散落在编辑器各处,可以做一个中心管理。

利用Unity的特性

  • 组织好hierarchy,不管是编辑的时候还是运行的时候,编辑的时候可以通过工具来简化组织层级的工作。

    让每个场景自己能跑。

    利用基于组件的架构,尽可能少的使用继承(用C#的话),多通过组合来完成开发。遇到需要数据访问的通用接口,我们可以通过组合的方式来完成,而不是提供一个公共基类接口来继承,只要大家都认识这个公共组件就可以取到数据了。遇到通用的事件派发,我们可以用字符串拼接的方式派发到指定的对象或者更参数组合派发事件到对象身上。

    框架采用星型架构+事件机制,由于Unity3D没有一个所谓的入口函数,不利于代码跟踪,这样的基础架构能带来很多便利。

    unity界面扩展能力很强,而且借助CLR(commom language runtime)的反射能力,C#里面开发界面非常容易。

    做好tag、layer规划,要考虑业务中哪类物体之间需要交互。

    在代码里面get某个prefab或者GameObject,可以考虑利用界面拖目标过来,这样更加直观,而且也能对抗变化,比如目标名字变了也不怕,而且还能节省代码量。

代码

这里针对C#,静态强类型面向对象本身就是一个坑,继承带着两个职责,一个是复用代码,一个是接口继承。虽然性能比lua高那么一丢丢,因为性能瓶颈不在业务本身,设计上的问题要严重得多。我认为像lua这种动态语言的元编程才能够贯彻单点真理,通过元编程把真理推导到系统的每一处。让代码始终保持语义,而我认为写业务代码最重要的是保持语义。保持语义的简单有效评判方法就是看这个类中的某个函数,单独看它能否看懂;多个接口能否组成完备的解决方案。静态强类型面向对象语言比较适合需求稳定的严谨的系统开发,而不是游戏开发。容易经过多次的策划需求冲刷,语义很容易扭曲,各种抽象泄露、各种hack。好吧,跑题了。

  • Unity3D容易被破解,因为发布版本的IL是非常容易被反编译的,要做好混淆的考虑。在Unity3D中混淆要考虑对编辑器的影响。

    复杂类型尽量使用引用类型,值类型反射麻烦,不方便序列化以及做成编辑器。值类型要小心赋值对象是否只是临时对象。

    引用类型释放之后,引用它的指针会置为null,可以放心使用。

    foreach、linq、协程慎用,反射只在编辑器中使用。

    考虑封装Time,方便做暂停。

    考虑使用调度器来完成功能,而不是在Update自己维护状态,这样做暂停也很容易,代码更清晰,功能更内聚。

    增量更新要一开始就想清楚。

美术

  • Unity3D可以通过扩展编辑器让非技术人员编辑界面来工作,组织好美术资源规格、路径,并且自动生成prefab。游戏场景物件也要规划好逻辑节点,这个也应该通过编辑器扩展好。复杂功能也应该通过编辑器开发给策划微调,特别是可视化比较重要的模块,比如动作调整。

    制作原型美术,让开发提升开发效率。

    有统一的约定,比如模型总是中心对齐,角色总是脚部对齐,统一的缩放、统一的动画骨骼命名,资源有统一的路径。

    支持换装(avatar)要一开始就想清楚。

    资源加载和优化尽可能早地给出雏形(只是雏形,帮助你对需求的把握,因为这时候你还不知道热点在哪),因为一旦没有规划好异步和资源释放,那么阻塞卡顿和内存飙升那是意料之内的。因为有雏形,那么代码会间接一点,也为改变提供了空间。

(本文来源:CocoaChina ) 

Unity3D开发技巧:如何避开unity编辑器的那些坑相关推荐

  1. Unity3d 开发(二)Unity 制作可发布插件

    文章作者:松阳 本文出自 阿修罗道,禁止用于商业用途,转载请注明出处. 原文链接:http://blog.csdn.net/fansongy/article/details/48634235 widt ...

  2. Unity 4.x游戏开发技巧集锦第2章摄像机的应用

    Unity 4.x游戏开发技巧集锦第2章摄像机的应用 作为游戏开发者,千万不要忽略了摄像机(Camera)的重要性.毕竟玩家是通过摄像机,才看到了游戏的视图.本章将介绍一些摄像机的常见应用.本文选自& ...

  3. Unity编辑器类中文教程汇总-Chinar(一个默默无闻分享知识的人)

    Chinar blog :www.chinar.xin Unity 编辑器资料汇总 本文提供全流程,中文翻译 统计我所有编辑器 Unity Editor 教程资料,便于查询学习 为初学者节省宝贵的时间 ...

  4. Unity编辑器定制和开发插件

    http://blog.csdn.net/a351945755/article/details/35286761 在阅读本教程之前,你需要对Unity的操作流程有一些基础的认识,并且最好了解内置的GU ...

  5. Unity 4.x游戏开发技巧集锦(内部资料)

    2019独角兽企业重金招聘Python工程师标准>>> Unity 4.x游戏开发技巧集锦(内部资料) 淘宝书店地址:http://item.taobao.com/item.htm? ...

  6. Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果

    Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果 使用忍者飞镖创建粒子效果 游戏中,诸如烟.火.水滴.落叶等粒子效果,都可以使用粒子系统(particle system)来实现.例如,<明 ...

  7. 爆肝,Unity3D游戏开发(第 2 章 编辑器的结构)

    基础知识 经过多年的发展,Unity编辑器已经越来越完善,使用起来也相当方便.快捷.Unity秉承"所见即所得"的开发原理,将编辑器与游戏引擎融合在了一起.传统游戏引擎几乎没有任何 ...

  8. 【Unity3D】Unity 编辑器窗口布局 ( 创建 Unity3D 项目 | 添加物体 | 层级窗口 | 场景窗口 | 游戏窗口 | 属性窗口 | 项目窗口 | 控制台窗口 | 窗口位置修改 )

    文章目录 一.在 Unity Hub 中创建 Unity 2020 编辑器版本的 Unity3D 项目 二.Unity 编辑器窗口布局 1.添加物体 2.菜单栏和工具栏 3.Hierarchy 层级窗 ...

  9. 【Unity3D】Unity 脚本 ② ( Visual Studio 2019 中的 Unity 编译环境配置 | Unity 编辑器关联外部 C# 脚本编辑器 Visual Studio )

    文章目录 一. Visual Studio 2019 中的 Unity 编译问题 二. Unity 编辑器中关联外部 C# 脚本编辑器 三. 设置游戏运行时脚本更新行为 一. Visual Studi ...

最新文章

  1. java http head 请求_http请求头header、请求体body、请求行介绍
  2. linux 分析磁盘性能,03.分析性能瓶颈 - 3.4.磁盘瓶颈 - 《Linux性能调优指南》 - 书栈网 · BookStack...
  3. UBUNTU添加开机自动启动程序方法
  4. 百度地图在jsp页面加载大量轨迹导致地图卡顿
  5. 广域网性能优化—Vecloud
  6. SNOI 2019 退役记
  7. Precision和Recall
  8. 锁优化:逃逸分析、自旋锁、锁消除、锁粗化、轻量级锁和偏向锁
  9. Docker 镜像之存储管理
  10. wxWidgets:wxTaskBarIcon类用法
  11. jQuery 表格实现
  12. zincrby redis python_【Redis数据结构 序】使用redis-py操作Redis数据库
  13. plpgsql语句的兼容性
  14. Lesson 04:类和对象,类的成员变量、成员方法、构造方法
  15. python源码剖析类机制_python源码剖析
  16. 购物也能乐开花 淘宝搞笑评价集萃--2
  17. 移动硬盘——显示盘符但打不开
  18. 网络信息安全课程笔记整理(一)
  19. 亲自动手从源码 构建 Groovy 2.3.8 发布包
  20. python处理fasta文件_Python脚本:fasta文件单序列信息提取

热门文章

  1. flume数据采集_大数据采集系统Flume集群部署
  2. android 高质量游戏,你玩过几款?2013年度十大安卓热门游戏大盘点
  3. python添加excel模块,Python Excel操作——xlrd、xlwd,,读取1、导入模块 i
  4. apache http server 停止工作_宝塔apache启动失败:报错 AH00526: Syntax error on line 解决方案...
  5. 实现粗糙表面_什么是表面粗糙度,你真懂吗?
  6. python建立矩阵原理_怎么用python建立矩阵-问答-阿里云开发者社区-阿里云
  7. 15_python基础—文件操作
  8. 中加学校计算机考试题,嘉应学院2009年计算机期末考试试题
  9. php 传递resource参数,php define的第二个参数使用方法_php技巧 - is_resource
  10. dz后台html,discuz X1.5 论坛后台站长常用操作小结