Unity3D如何有效地组织代码?

欢迎来到unity学习unity培训、unity企业培训教育专区,这里有很多U3D资源U3D培训视频U3D教程U3D常见问题U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌。

Unity3D可以说是高度的Component-Based Architecture,
同时它的库提供了大量的全局变量。

准确地说,代码作为Unity项目里的一种资源,此问题应该扩展到如何组织Unity资源。简单说说我们的经验:
1.  Unity有一些自身的约定,譬如项目里的Editor,Plugins等目录作为编辑器,插件目录等等。知名的插件会自己存放一个目录,譬如NGUI等。
所以我们自己的代码,一般目录名会以下划线开头,譬如 "_Scripts", "_Prefabs"等。
对于场景,文档等目录,用两条下划线,以便他们能排在最顶部。

2. 代码用C#,别用JS。必要的话用namespace将自己的代码括起来。我们是用namespace把自己积攒的公用库包住。

3. C#的注释要认真写,打///就能帮你补全了,没理由偷懒。

4. 每个程序文件开头要用一段注释写修改Log,谁改过什么简单留一条说明。就算用了Unity的版本管理或者Git,那些log终究会丢失,只有认真把log写在代码里,才会有意识去认真优化它。

5. Unity的脚本逻辑,就功能而言大体分为两种,一种是比较独立的,譬如爆炸之后1秒钟消失,这种单独写个脚本绑定到目标上即可。

更多的是脚本里与其它的脚本进行交互。Unity里提供了一种万金油的方法是SendMessage, 这种方法性能略差,如果你调用的频率不高,随便用也无妨。另一种方法是直接通过对象的实例去调用。
我们的做法是写几个公用的控制器,让它们各司其职,负责各自的事情:
1.  写一个一个GlobalManager.cs来控制游戏的全局变量及全局方法。静态类模式。譬如当前玩到第几大关第几小关,玩家的金币数量等。

2. 写一个GameController.cs来控制当前关的游戏进程。单实例模式。游戏的主循环也是用它控制。初始化,胜利、失败判定等等。

3. 写一个InputController.cs来控制所有的用户输入。单实例模式。鼠标、键盘、触摸屏,我们做游戏是保证同时支持这三种输入的,因为大部分时间是在PC上测试。
关于GameController与InputController的联系,有点让人纠结。一般来讲是在InputContoller里调用GameController.Instance.Foo()执行方法。或者直接对Input写成Listener的模式,让GameController去监听。

4.  其它的类似菜单控制器,声音控制器,成就控制器,IAP虚拟道具控制器等等,也是采用类似的方法管理。

5.  关于PlayerPref的操作,统一写成静态类的get/set模式,程序中哪里要用则直接读写。

6.  如果你的项目里场景的数量少(<5),那么拖入场景的资源可以很随意。如果场景数量很多(几十个,有的解谜游戏每个关卡就是一个场景),那么拖入场景的prefab数量一定要少。

7.  设计你的prefab资源里,你要想像当其他人拿到这些资源,是否直接拖入一个空场景里就能run,顶多再简单设置几下。如果你设计的资源不能做到这些,那么得好好重新想想。

写了这些,感觉写不下去了。
想吃透Unity,起码得真做出几款产品放上线才行。真正做产品的过程中会碰到各种各样意想不到的问题,代码不断地被重构和妥协,不存在什么最佳的方案。
暂时就写这些吧,希望能抛砖引玉。

(PS:当然,这个是根据公司大项目来说的,每个公司都有自己定的规范和框架,略有不同。如果是想打飞机,2048这类的小游戏是用不到这么麻烦的。看看就好,知道一下)

更多精彩请点击 http://www.gopedu.com/

时间: 2024-10-11 01:09:19

Unity3D如何有效地组织代码?的相关文章

Unity如何有效的组织的代码

转自知乎:梁伟国 准确地说,代码作为Unity项目里的一种资源,此问题应该扩展到如何组织Unity资源.简单说说我们的经验:- Unity有一些自身的约定,譬如项目里的Editor,Plugins等目录作为编辑器,插件目录等等.知名的插件会自己存放一个目录,譬如NGUI等.所以我们自己的代码,一般目录名会以下划线开头,譬如 "_Scripts", "_Prefabs"等.对于场景,文档等目录,用两条下划线,以便他们能排在最顶部.- 代码用C#,别用JS.必要的话用n

求推荐go语言开发工具及go语言应该以哪种目录结构组织代码?

go语言的开发工具推荐? go语言开发普通程序及开发web程序的时候,应该以哪种目录结构组织代码? 求推荐go语言开发工具及go语言应该以哪种目录结构组织代码? >> golang 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/golang/1010000008839459/求推荐go语言开发工具及go语言应该以哪种目录结构组织代码.html

ViewModel 实践:高效简单地组织代码

转载自:http://www.cocoachina.com/ios/20150714/12447.html 文/某鸟 前言 不知不觉,笔者也撸码也已经一年多了.随着撸码的数量疾速上涨,如何高效,简单的组织代码,经常引起笔者的思考.作为一个方法论及其实践者(这个定义是笔者自己胡诌的),始终希望能够找到一些简单.有效的方法来解决问题,由此,也开始了一段构建代码的实践体验. 这次要分享的,是自己在长期实践 MVVM 结构后,对 MVVM 框架的一些理解与自己的工作流程.其中或许还有一些地方拿捏欠妥,希

Unity3D动态对象优化代码分享

具体解释请仔细看注释里已经讲解的很细致了,这里就不多废话了 代码如下: using UnityEngine; using System.Collections; using System.Collections.Generic; /// <summary> /// 动态对象优化 /// </summary> public class DynamicOptimization : MonoBehaviour { // Use this for initialization void S

unity3d 射弹基础案例代码分析

1 #pragma strict 2 import UnityEngine.UI; 3 4 function Start () { 5 6 } 7 var speed : int = 5; 8 var newobject : Transform; 9 var sdshu : int = 0; 10 var xmshu : int = 0; 11 12 13 function Update () { 14 //yidong 15 var x : float = Input.GetAxis("Hor

如何组织代码

因为篇幅限制,只列出概要,详细信息可以直接点击概要中的链接. 1.重新组织数据http://blog.csdn.net/wqetfg/article/details/51073822 2.重新组织函数http://blog.csdn.net/wqetfg/article/details/51073826 3.在对象之间搬移特性http://blog.csdn.net/wqetfg/article/details/51073833 4.简化条件表达式http://blog.csdn.net/wqe

转载 ---- 【Unity3D自学记录】代码获取隐藏游戏对象

http://blog.csdn.net/daijinghui512/article/details/34095553 很多人把游戏物体的active改成false后,用GameObject.Find()就找不到游戏对象了. 我来告诉大家一个巧妙的方法,借鉴的是雨松大神的方法~ 首先创建一个父级OBJ,OBJ的active不能为false 然后将我们隐藏的游戏物体放在OBJ下~ 如图: 代码如下: [csharp] view plain copy <span style="white-sp

JS面向对象组织代码

JS本身不存在类的概念,它对于继承的判定有时非常混乱,当然这并不影响我们以面向对象的思维去编程. 例如我们有两个类A类B类,我们想让B类继承A类,在python中可以轻而易举的实现,在JS中需要一种折中法 function A() { } A.prototype.hello = function() { console.log(1) } function B() { } B.prototype = new A(); (new B()).hello() B的原型对象指向了A的实例 // 在子类需要

Unity3D安卓交互 - 使代码运行在UI线程

runOnUiThread(new Runnable() { public void run() { // TODO Auto-generated method stub } });