20140712版

版本号

Version

日期

Date

作者

Author

变更主要原因描述

Brief Description

1.0

2014-4-26

陈霈霖

初稿

2.0

1. 前言

本手册撰写目的是整体上的介绍整个制作流程,并不过多详述细节,具体功能要咨询具体人员。

2. COSMOSBOX工程目录解析

2.1 目录解析

工程目录

工程由两个库组成,

SVN库(https://cosmosbox/svn/cosmosbox/trunk) SVN库存放代码、零散美术源文件、策划内容,使用SVN上传;

l cb-scheme策划库,cb-client客户端, cb-product产品

l AIStudio  AI编辑器

l ArtResources 美术资源,未整理的零散资源

l Cb-product 产品库、编译的客户端、服务器

l Tools 工具脚本,忽略

Cb-art美术工程库:存放用于正式产品使用的Unity序列化游戏对象,使用Unity的Asset Server进行资源管理上传;从Unity Asset Server取cb-art美术库到svn库内(如果Unity安装在C盘双击”_首次来这里安我”会自动完成),最终工作目录如右图

游戏运行时程序、策划、美术的结合

正式的游戏客户端,读取策划表,根据填表内容布置关卡(关卡是一个美术资源)、放置怪物(怪物是一个美术资源)、施放技能(技能是填在表里的)。

Spine源文件的转变方式

SVN的ArtResources里的SpineProject是美术制作的源文件,cb-art美术工程库会读取这个目录,生成Unity直接可用的Prefab和图集,然后经由打包,供客户端使用。

定时打包机制

每天凌晨,服务器会自动执行cb-art的打包程序,将Unity美术Prefab打包成AssetBundles,同时将游戏客户端打包成ipa、apk和exe程序,第二天回来就能测试昨天的工作是否有问题。

如何运行游戏PC版

运行cb-product目录ClientX86D_640_960.bat,这是640*960像素的客户端,模拟iPhone 4的屏幕大小。

如何安装iOS/Android手机版游戏

在cb-product目录下的ClientIOS.ipa是iOS客户端;在cb-product目录下的Client.apk是Android客户端;怎么装入手机你懂的。。。

游戏配置表

在cb-scheme目录下的setting/目录里的excel表全是游戏配置表

3.
软件环境推荐

3.1 基础软件

3.1.1 常用网址

共享文件路径:\\COSMOSBOX\Share

SVN地址(https://cosmosbox/svn/cosmosbox/trunk)

3.1.2 必备基础工具

WPS 或Office2013+OfficeTab

Beyond Compare

Total Commander程序开发环境推荐

TortoiseSVN 版本控制

3.2 程序开发环境推荐

3.2.1 开发环境(以下工具安装到默认路径,即C盘为主)

Windows7 x64 SP1

VisualStudio 2012(打最新版Update补丁,目前是Update3)

Unity3D 4.5.1 + UnityVS1.2

AndroidSDK_x86

WebStorm 8.0.1

3.2.2 VisualStudio中C#开发设置

4. 常用英语单词

规范日常沟通用的英语单词,最崇高的目标是:会英语就会看我们的程序代码。

英文

中文

英文

中文

Id

配置表的编号,只在策划填表时用

ObjectId

程序类实例ID

TypeId

原型ID,配置表ID

LogicId

服务器/客户端通讯对象编号

UId

User ID,用户编号,非UniqueID

Rank

玩家(人)等级

Actor

怪物,NPC,非玩家

Obstalce

障碍 (本质是一个Actor)

Hero

玩家英雄

Trap

陷阱,一种Actor,触发功能

Effect

特效

Player

玩家本人

Boss

关卡大佬

Skill

技能

Map/Level

地图/关卡 (制作时常混用,程序实现会自动加以区分)

Bullet

子弹,技能发出的碰撞物

UI

用户界面

Buff

游戏中的状态魔法

Coin

游戏币

Trigger

程序里的触发器,有一系列特殊函数

Gem

宝石

Money

人民币

Texture

纹理,实质就是图片!(不用Picture)

Scene

场景,少用

Sprite

精灵,游戏里的一个图片单元

Weapon

武器/饰物/装备

Battle

战役,关卡里的一小段

Level

关卡,包含许多战役

Hit

被击,非撞击,包括远程子弹击中

Strike

撞击

Power Up

强化

Evolution

进化

Fusion

合成

Team

队伍

Member

队伍的成员

5. 明确工作职责

策划

美术

程序

机器人

关卡制作

美术设计

维护游戏核心demo

美术资源自动产品化

资源/物品

命名规范制定

美术资源

命名与入库

开发游戏客户端

策划表资源自动产品化

系统设定文档

UI面板拼接

开发游戏服务器

代码自动产品化

数值调整

动画制作

开发自动化机器人

UI面板自动产品化

6. 美术制作说明

6.1 基准说明

标准作图像素:640*960

项目使用到的游戏引擎与工具

2D Toolkit (Unity3D 2D插件,内置自动图集生成功能,内置帧动画制作工具)

NGUI (Unity3D UI插件, 内置自动图集生成功能,大量UI控件)

Texture Packer 图片集生成器,供上述插件共享图库

Spine 骨骼动画制作工具,兼用作制作帧动画特效

图片类型

图片规范

Q版武器

单图,用Texture Packer打包成图片集

Q版主角

游戏场景、UI显示、两个图片集

卡牌/大武器

单张图片(规格一样 640 * 960),独立

UI图片

各元素各自一样图片,大小不一样,NGUI自我打包图片集

武器图标背景

NGUI自我打包图片集

2D Toolkit图片集 或 Spine动画

场景

2D Toolkit图片集

6.2 工具、插件使用教程

Unity是一个极具延伸性的游戏引擎,无数的第三方开发者为其贡献力量,开发插件,因此也有各种专业的插件诞生,像我们使用NGUI、2D Toolkit等插件。

在美术制作过程中,需要使用到的一般是Spin动画软件和NGUI。

Spine官方快速入门(必须掌握):http://zh.esotericsoftware.com/spine-quickstart ,官网内附带视频教学资源。

NGUI基础(不用细看,多问程序):http://blog.csdn.net/we000636/article/details/7418413

6.3 美术资源目录

SVN目录里的ArtResrouces是美术零散资源大目录,其中 “SpineProject” 是使用Spine制作动画的目录,必须按照命名规范使用和分布,其余的均为零散资源,可自行创建目录进行psd等资源备份。

6.3.1 Spine动画工程目录命名规范

程序会根据命名规范自动产品化所有动画

每一个目录对应一个图集(所有图片会聚合成一张图片),优化性能和空间大小

每个目录里都有一个Textures(翻译:纹理)文件夹放置所有图片

Common目录比较特殊,目录对应一个图集,里面再有子文件夹放置Spine动画(同时需要Textures)

6.3.2 Cb-art美术工程库常用目录

放置所有整理过的产品化美术资源(Unity3D直接可用的),该库不能通过svn拿到,需要通过Unity的Version Control版本控制取得。

l cb-art\Assets\Product目录是所有打包元素

l Product\Actor代表地图怪物

l Product\Audio代表打包的音效

l Product\Card代表大卡牌图片

l Product\Effect代表所有游戏特效

l Product\Hero代表英雄角色

l Product\Map代表地图关卡

l Product\Spine代表上文的SpineProject目录转化成的Unity3D可用资源

l UI就是拼凑UI的界面

l Weapon是打包好的武器图标

l Scene,Actor-Bones,UI2是历史遗留,漠视

自动化机器人在执行时,会把cb-art\Assets\Product目录下的元素针对性地逐个打包出去,供客户端读取。

策划在填充表格时,只要使用Product下的相对路径就可以使用特效了(举例,策划使用一个子弹特效时,填写“Effect/Skill/CastBullet”。

6.3.3 如何编辑地图

修改地图

Product\Map目录下是所有的关卡地图,双击打开。

新建地图

打开cb-art Unity工程,从菜单上选择Game->创建新关卡场景,然后保存在Product/Map目录下(必须这个目录下,否则不能自动编译)。

地图编辑原理

一个关卡,由“Battle”和“Actor”组成的,附带一些场景对象(图片)。

可通过右上角的菜单来编辑地图功能。

6.3.4 如何编辑、预览特效

搜集的第三方粒子特效包

Cb-art库中,搜集了一些第三方的粒子特效,放在Assets\Effect下,以Prefab形式保存。比如,使用Cartoon Fx包的特效,展开目录Assets\Effect\JMO Assets\Cartoon FX\Prefab(Mobile),把里面的蓝色图标的Prefab拖到场景里。

使用Unity内置的粒子系统

Unity的粒子系统名叫Shuriken Particle System,网上资料较多,不过多叙述。

参考:http://game.ceeger.com/Components/class-ParticleSystem.html

参考:http://game.ceeger.com/Manual/ParticleSystemGrouping.html

6.4 Actor敌人怪物制作规范

机枪球类:机枪球、警卫

Spine制作,三个方向的图片

三个Skeleton,   “body” Skeleton,“gun_front” Skeleton,“gun_back” Skeleton

向前,左侧右侧时显示gun_front;向后时显示gun_back

坦克车类: 战车坦克、狙击手

Spine制作,两个方向的图片

两个Skeleton, BodySkeleton, Gun Skeleton

UFO类: UFO、飞机

Spine制作,一个Skeleton,静止旋转

特效子弹方向朝上

带有方向的子弹,制作时默认方向向上(怪物不同,怪物默认朝下)

6.5 图片资源命名规范

6.5.1 Spine动画(Animation)命名

像战车怪,具有两个方向,那么,它有两个移动动画:move_01 / move_05,和两个攻击动画skill_01 / skill_05,代表不同朝向下使用的动画。

静态怪物,如机关、金币等,默认使用move动画。

常用动画:move | move01~move05 | skill01~skill05 | death | show

6.5.2 设计 Spine换肤的命名

参考SpineProject/MachineGun的命名规范,如gunball_001_gun_003_01,意思是gunbal_(机枪球类),_001(1号皮肤),gun_(炮台),003_(炮台类型:中间或两侧),_01(朝向)

6.6 策划表ID编号规则

6.6.1 技能ID

假设技能100号,那么它调用的子弹就是100号,Buff就是100号

如果技能101是组合技能,它的子技能ID建议分别是1011,1012,1013;如是子技能复用的,用回默认编号。

6.6.2 Actor ID

5000-5999是场景物品,100-199是机枪球类怪,200-299是战车类怪,300-399是炮塔类怪,400-499是UFO类怪,500-599是警卫类怪,600-699是狙击手类怪,700-799是布雷机类怪,1000-1099是功能机类,1100-1199是惊雷怪,1299-1299是芯片怪。

2000-2999是BOSS。

6.7
Spine使用技巧、潜规则

欲练神功,先自摸Spine到中级阶段。

Setup模式中可移动Slot,Animate模式中不行

在装配模式(Setup)中,可设置图片偏移,而在动画模式中,对图片(Slot)做偏移相当于对其上的Bone做偏移,因此,Bone一定程度可理解成动画组:当要对图片做动画,就建一个Bone。

概括一下:

对Attachment(图片)进行偏移,实质对Slot偏移,图片是无偏移的

Setup模式中,Slot可进行偏移(Translate),Bone可进行偏移

Animate模式中,对Slot进行偏移(Translate),无效,相当于Bone偏移

动画中带动旋转问题

父节点进行旋转动画,子节点偏移动画,在客户端会有计算误差问题。

解决方案将偏移动画的子节点移出去。

帧图片隐藏,而不是Slot和Order隐藏

动画中,要把一张图片隐藏,要把Attachment(附件图片)左边圆点点上,而不是将Draw Order和Slot左边圆点

动画中谨慎对待颜色修改和图片显隐

可视为Spine运行库的BUG;比如动画A对图片K进行淡出(透明度到10%),此时切换动画B,图片K将保持透明度10%的状态,因此动画B的第一帧务必设置图片K关键帧,透明度100%。

PS:现基本可忽略这个问题,项目中屏蔽动画缓动,每个动画播放前都会把骨架重置到最初状态。

7. 策划配置说明

7.1 策划配置表的作用

策划把配置表都是Excel表组成的,游戏里的关卡列表、怪物列表、技能列表、AI参数、游戏数值等都由配置表控制。可以说策划配置表的存在构成了整个游戏。

它的好处是,把一些常用的配置脱离程序代码,供策划进行配置、修改游戏,不用编译进去游戏程序,更加灵活

7.2 Excel表放置位置

策划配置表放在SVN目录里的cb-scheme/setting里,经过编译后,会被放到产品库cb-product/setting里。

编译前,编译后的文件都可以用Excel打开的哦。

7.3 Excel表编译

首先理解,Excel表编译本质上是将Excel表转成制表符(Tab)分隔的文本文件。

在配置有KKScriptHelper小程序的电脑上,按“Alt + ~”快捷键,就会弹出快捷窗口,按一下策划表编译就可以了。

如果按快捷键没反应,双击svn目录里的tools/excel2tab.bat文件。

7.4 技能配置详解

7.4.1 理解技能机制

技能由技能、子弹、Buff、Trigger四个模块相互交集组成的。

7.4.2 技能填表举例

填表,本质就是对技能逻辑的描述。

假设一个怪物技能,发出一个球攻击敌人,要蓄气吗?蓄气5秒;蓄气时有特效吗?有;蓄气后扔出的子弹就是球,球有特效吗?有;球有速度会移动吗?会;球有特效吗?有;球打中敌人后有效果吗?有,Buff;打中敌人的效果是怎样的?Buff里的Trigger。

填表:

技能蓄气5秒,发出球体:填表时,技能ReadyTime 5秒,填一个蓄气特效,Bullet 填1号;

子弹就是球体,向前移动:填表时,Bullet 1号,Speed 5,填一个子弹的特效,那么技能在ReadyTime结束后就会发出子弹;Buff填1。

Buff就是中弹后的效果,Buff是跟一个人物相关的,加载一个人物身上(可能是怪,也可能是玩家英雄):填表时,Buff 1号,Trigger 的FuncName写Hurt,Arg1写1;

Trigger就是函数集,由程序代码组成,程序写好,由Buff调用,不用策划额外填表;

比如上面Buff 1写了Hurt,对应程序函数Hurt,参数1是系数,那么Buff 1的效果就是,对Buff人伤害倍数1的血。

7.5 音效配置

l Actor.xls表中的StrikeSound可配置每个怪被碰撞后的个别音效

7.6 多语言系统使用

7.6.1 原理

多语言编译器,自动搜索程序代码、游戏配置Excel表的Name字段和Description字段的字符串,认为是进行翻译的字符串,生成一个关键字Excel表。

比如,你有武器表(weapon.xls),里面有字段Name,那么Name下所有的字符串都会输出到“翻译表”(自动排出重复),让你直接进行翻译。

7.6.2 翻译

使用快捷键“Ctrl+~”,点击编译多语言表,就会生成一些语言Excel表放在cb-scheme/setting/l10n里面,Excel打开即可进行翻译。

8.
程序开发规范

8.1 代码规范

l 局部变量小写开头单词分割首字母大写:startIndex,windowBorderStyle

l 成员变量、成员属性、成员函数用大写字母开头:Name,MapIndex,RecoverLife()

l 常量\枚举值用大写

l 每个类如果有成员变量,在声明处应直接赋初值,复杂情况的初值在构造函数中处理,非赋值的初始化工作在Init函数中处理

l 继承自Mono的类不允许使用构造函数,用Awake(); 初始化尽量用自定义Init函数,不然烦死你

l Code Is Poetry 代码如诗,大家都看得懂的代码才是好代码

8.1.1 注释

每一个方法,都要尽可能的在方法头注释。

如果能按照注解规范最好(不强制要求); 参考网址 http://www.tmser.com/?post=34

8.1.2 多语言L10N.Get(string)

程序中,凡是需要多语言翻译的字符串,使用L10N.Get(string)方法。编译器会自动字符串搜索,来生成翻译关键字。(参照策划“多语言系统”使用)

8.2 技巧

8.2.1 需要用到大量循环的地方,考虑用协程

Unity的协程,其实类似于NodeJS的异步IO,熟练使用你会爱不惜手,既使用方便,性能又好

8.2.2 事件驱动编程

使用事件驱动编程,避免在每一次循环里对象状态;比如:一个技能结束后,通知发射者可以走动;  而不是: Update里判断技能是否结束,如果结束了,发射者可以走动状态。

8.2.3 尽量使用英语命名

装一个《有道词典》使用英语,尽量不使用汉语拼音去命名。一来所有人都能理解这个单词,二来提高自身英语水平。阅读英语文档的能力,一定程度决定了一个程序开发者解决难题的能力。

8.2.4 使用代码编辑器Sublime Text 2 / Notepad++

多点用文字编辑器,不要过度依赖Visual Studio等大型IDE。

Sublime Text装常用插件ConvertToUTF-8才能支持GBK。常用快捷键Ctrl+D,Ctrl+R,Ctrl+P。

8.2.5 使用自动化偷懒

时刻思考有什么工作能自动化,减少的重复工作。

举个游戏工程里常见的浪费时间的流程:美术 找 策划 使用 程序 写的工具导出游戏场景;可简化成:美术上传,机器人自动识别并导出游戏场景。

8.2.6 用搜索引擎解决问题

提出技术问题之前,先去百度搜一下,再去Google搜一下,实在没有,Bing也要搜一下,都解决不了,可以去StackOverflow提问

8.2.7 消灭重复

编程的最高最难最大的目标,就是让重复功能的代码不要出现

8.2.8 爱上重构

没有什么比重构更能提高技术水平了; 菜鸟的特点是,写完代码后,都不敢去看自己之前的代码。

8.3 某些注意事项

8.3.1 模块之间的依赖

举例,UI、玩法模块依赖网络;但是,网络是独立的,不依赖UI,因此千万不要出现在网络里使用UI的函数等情况,使用事件驱动编程,网络里触发事件,UI绑定网络的事件。

使用事件驱动编程,在某种程度来说,会加大程序的可读性,但会大幅度的提高模块之间的松耦合。

比如说,现在要做一个新游戏,哦,整个网络模块拷过去是不会报错的。因为没有对其它模块进行依赖。

8.3.2 松散代码

某些特别的情况下,如教学关剧情,某个BOSS剧情等,使用配置表已经无法满足特殊功能需求了,这些需要进行一些硬编码。

针对特殊功能的硬编码,需要特别的谨慎,尽量不影响一些共用代码,如CMap, CActor这些公用类。

以下几个模块,最初就设计成放置特别松散的代码,它们的特点是,几乎无依赖顾忌地调用程序里的其它模块:

CTrigger_xxx.cs:Trigger函数,根据项目的需要而添加;

CSpineEventFunc.cs: Spine动画的事件函数,Spine动画的Event标签都分别对应其中;

AiFunc.cs:AI节点,函数集合;

另外,CxxxActor在某些情况下也无可避免的要硬编码,如Boss特殊技能、Boss触发剧情等,但务必尽最大可能,不要将这些特殊功能写到公用层(如CMap.cs、CActor.cs等),否则随着特殊功能的增多,整个项目会混乱不堪。

COSMOSBOX手遊制作手册(Word备份)的更多相关文章

  1. 【Loadrunner】【浙江移动项目手写代码】代码备份

    vuser_init(){        lr_start_transaction("login"); web_url("10.78.224.136:8080" ...

  2. UGUI 深度優化提升手遊效能

    https://hackmd.io/s/S1z1ByaGb#UGUI-%E6%B7%B1%E5%BA%A6%E5%84%AA%E5%8C%96%E6%8F%90%E5%8D%87%E6%89%8B%E ...

  3. 中國區的代理協議的韓國遊戲廠商PatiGames

    “與阿裏巴巴簽署旗下游戲「突突三國」在中國區的代理協議的韓國遊戲廠商PatiGames決定與阿裏巴巴終止合作.”相信這條前不久報導的新聞,很多人並不陌生,但這背後其實並不像表面那樣簡單.早在今年4月P ...

  4. 【干货】微信场景之H5页面制作免费工具大集合

    营销代有手段出,各领风骚数百天.要说现在哪些营销方式最能传播,屡屡刷爆朋友圈的H5页面肯定就是首当其冲的,提到H5页面,就立马想到"围住神经猫",上线微信朋友圈3天的时间便创造了用 ...

  5. 把数据输出到Word (非插件形式)

    项目开发过程中,我们要把数据以各种各样的形式展现给客户.把数据以文档的形式展现给客户相信是一种比较头疼的问题,如果没有好的方法会 使得我的开发繁琐,而且满足不了客户的需求.接下来我会通过两种开发方式介 ...

  6. MySQL备份方式简介

    MySQL备份的方式主要分为两种: 文本格式备份: 命令:mysqldump 转储文件:dump file 主要内容:数据库结构及数据(create talbe /insert) 二进制备份:这类备份 ...

  7. 导出word使用模版

    在我们做我们的小组项目的时候,刚开始的时候我们用到的是Mvc+EF,用上了我们的ITOO框架.在最开始的计划,我们要用到瑞郎报表.可是呢,由于工期原因以及技术暂时没有实现,我们不得不想一个比较折中的方 ...

  8. VS编程中找不到Microsoft.Office.Core、Microsoft.Office.Interop.Word和VBIDE

    在使用vs2005. vs2008. vs2010 制作包含 word等office的应用程序时,有时找不到对Microsoft.Office.Core. Microsoft.Office.Inter ...

  9. 从源代码制作deb包的两种方法以及修改已有deb包(转载)

    From:http://yysfire.github.io/linux/%E4%BB%8E%E6%BA%90%E4%BB%A3%E7%A0%81%E5%88%B6%E4%BD%9Cdeb%E5%8C% ...

随机推荐

  1. Linux命令之ftp

    ftp [-pinegvd] [host] pftp [-inegvd] [host] 用户通过ftp这个程序来使用Internet上的标准文件传输协议(FTP).本程序允许用户向远端网站发送文件,或 ...

  2. 【BZOJ 3672】 3672: [Noi2014]购票 (CDQ分治+点分治+斜率优化)**

    3672: [Noi2014]购票 Description  今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会.        全国 ...

  3. cogs 2039. 树的统计

    2039. 树的统计 ★★   输入文件:counttree.in   输出文件:counttree.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 关于树的统计问题有 ...

  4. 【高精度】【找规律】Gym - 101243B - Hanoi tower

    题意:给你一个经典的汉诺塔递归程序,问你最少几步使得三个柱子上的盘子数量相同.(保证最开始盘子数量可以被3整除) 规律:ans(n)=2^(2*n/3-1)+t(n/3). t(1)=0. t(n)= ...

  5. 【线段树】Petrozavodsk Summer Training Camp 2016 Day 6: Warsaw U Contest, XVI Open Cup Onsite, Sunday, August 28, 2016 Problem H. Hay

    有一些草,一开始高度都是0,它们的生长速率不同. 给你一些单增的日期,在这些日期要将>b的草的部分都割掉,问你每次割掉的部分有多少. 将草的生长速率从大到小排序,这样每次割掉的是一个后缀,而且不 ...

  6. kindeditor在Firefoxt 和 Chrome 下不能取到值的解决方法

    默认form模式提交数据的时候,在ie下用户不需要进行任何设置和调用sync函数,因为editor已经自动调用,但是在firefox和 chrome下,用户如果不手动调用sync函数,editor的数 ...

  7. 简单实现ToolStripMenuItem(菜单栏)的单选效果

    来源:http://www.97world.com/archives/2194 这几天在写又拍云的客户端,老实说确实学到了不少东西!接下来的几天我会把一些技巧或者原来没有接触过的一些东西发上来,算是复 ...

  8. jQuery中的Ajax全局事件

    Ajax全局事件 全局事件会在有ajax请求的情况下触发. 方法名称 说明 ajaxStart(callback) Ajax请求开始时执行的函数 ajaxStop(callback) Ajax请求结束 ...

  9. mybatis查询日期时间数据得到long类型数据的问题

    使用mybatis查询数据时,如果数据库存储的是timestamp.datetime.date.time等时间类型,而Java bean也使用的是date类型,mybatis会自动将date类型转换为 ...

  10. Bower管理依赖库初体验

    比如一开始我用了jquery-1.10.2.min.js,后来要用bootstrap,但bootstrap依赖的确实2.0.3版本的jquery,那又要下载一个去替换原来的,这样的事情发生多了就会觉得 ...