Unity3D游戏UI开发经验谈
原地址:http://news.9ria.com/2013/0629/27679.html
在Unity专场上,108km创始人梁伟国发表了《Unity3D游戏UI开发经验谈》主题演讲。他以公司团队为案例,从流程方面介绍了从UI制作、设计到编程,并展示了UI布局和美术制作框图。他强调做技术产品一定要考虑开发和研发的区别。

以下是文字实录:
各位广州的朋友大家好!我是梁伟国,今天由我给大家讲讲Unity3D游戏UI开发。我之前是做Web的,是程序员出身,做过游戏设计师,现在是一家创业公司的创始人。从2006年到2009年,我在IBM公司工作。09年后自己做过一段时间的自由职业者,到最后才做Unity3D。从2006年后就跟朋友做了一个工作室,我最长的工作时候是在IBM,在IBM里技术方面不一定提高很多。但在同事聚会时,在里面学到最大的收获是流程和标准化的管理,500强公司的流程很严谨。之后我自己出来开公司,发现自己的工作室流程很混乱,所以今天很多是从流程方面跟大家探讨UI的经验。
首先跟大家简单介绍一下UI展示终端。最直观的是屏幕不一样,拿iPhone4、iPhone4s、iPhone5就代表了三个不同的屏幕,iPad1和iPad2也是两种不同的屏幕。跨平台第一直观就是多分辨率。
今天跟大家分享的是从UI制作、设计到编程。从设计角度开始,首先我们会考虑应该怎么做,怎样使成本降低。
UI设计三大原则
第一个设计的原则是居中布局,在2002 年、2003年像网易、新浪的网站是全屏铺满,从2005年开始就是居中,为何会有这种变化呢?是因为宽屏普及率很高,所以就会变成居中。在屏幕千变万化的情况下,我们考虑居中布局。
它大部分的功能都是通过居中的对话框来实现。因为要考虑到多分辨率,就得考虑UI的背景。如果用居中,UI的背景可以选择是否使用3D背景。大家如果玩过这个游戏,他们居中就是这个区域。
第二个原则九宫格浮动布局,这种情况下我们做了UI后就是为了在不同的分辨率上,这种九宫格的布局使用功能按钮、图表、血条等。这种浮动设计是任凭屏幕变化多大,都始终保持相对合理的位置。
第三个原则自适应尺寸,刚才两种布局是不能完全解决我们的需求,对话框按钮就是要根据屏幕拉伸。顺便提一下,Unity并没有区别iPhone、Android,全部都是自适应尺寸。
UI美术制作
上面三种方式就是UI的原则。设计的思路定下来后,就要开始美术制作,现在分享一下我做的美术框图。美术制作由草图再变成一个框图,我们游戏的框图用了AI,我可以告诉大家用AI更简单,好处更多。因为它很容易上手,任何一个策划用一天时间就能掌握基本操作。
我们在画框图时,就能很明确知道界面能够知道放下多少个按钮。画完草图后,让美术根据草图、尺寸做美术效果图,UI成品图也是在AI制作,PS也是挺好,国内的美术更喜欢用PS,画起来很简单,也很直观,国内AI高手没有那么多,游戏用AI用得不多。我们之所以用AI不用PS主要是AI是矢量,PS每个按钮还得画一次,效率太低了。整个游戏从开始到进入地图到对话框等,每一个都是可以用不同的画板、不同的分辨率,还有一个优点是导出图片很方便,用PS的话很可能一个按钮十几个图层,光选择十几个图层就很费劲。现在显示的图大概花费了两周不到,很方便。
下一步就是导出UI效果图,以前搞房地产、建筑之前,房子还没有盖,就找人喷一些效果图,让大家有直观的感觉,知道房子做出来是怎样,美术也是一样,当把AI画出来后,都有一个效果图,效果图出来后有很大意义。我们要求每一个UI页面导出效果图,存放到Unity项目文件夹,这是我们团队的规范,必须要保存到规定的文件夹里。
UI程序的实现
一个游戏的一线员工主要是策划、美术、程序三种工种组成,刚才的流程里为何要有草图和效果图,原因是草图是策划和美术之间沟通,之后用程序与美术用效果图沟通,让程序在Unity在程序中摆放。我们定了这个流程是减少策划、美术、程序之间的沟通成本,策划把草图交给美术,美术跟草图沟通好,然后程序跟美术就不会有什么纠纷。关于导出产品图,UI分了四种图片分类,普通切片、九宫格切片和填充整个区域的切片。
最后一项是讲程序,程序员拿到成品导出后,按照我们团队,就由程序员去摆放。我们程序员跟我们讲希望美术摆好再给他,但尝试过之后更麻烦。之后导出UI效果图,分层次、分组,用00_、 01_、02_序列号命名,这样会看得比较舒服,虽然这时命名多花一点时间,但是以后能节省很多工夫。接下来很重要的是程序放在哪里。整个UI对象有时比场景还多,要是自己写的程序把一段程序放在其中一个对象里,这时项目交给另一个人,他根本就不知道在哪里。我们专门用一个对象控制菜单的主逻辑,就把菜单 主逻辑绑到他身上。有时候有一些UI迫不得已还是需要那种单独把一个代码绑定在一个特定的UI对象。关于UI的布局摆放,只能靠场景组合来摆。
UI自动缩放
关于UI自动缩放程序,在这种情况下我们要设计一个UI自动缩放,我们是以iPhone4为基准,iPhone4是最中间的比例,变成iPad就会竖向拉长,iPhone5就横向拉长,实践之后效果不好,我们就按照iPhone4的长宽比来做。我们的对话框主要是以iPad的框来做,经过程序进行缩放按照比例,保证在iPhone4、iPhone5里都看得很束缚。
创业团队只需开发
关于性能问题,就是耗内存。如果确实占很大内存,可以使用动态加载、动态销毁。将独立的UI对话框制作成prefab。我作为过来人,大家做技术产品一定要考虑开发和研发的区别,特别是创业,研发是没有时间保障,开发是有明确的时间及产量保证,我们要做一个产品,产品用多少时间做是要有明确的。在北京,很多同行、团队用18个月、22个月开发一个开品,他们就是没有搞清楚开发和研发的区别。我们团队就是不太愿意要技术员研发很多时间,虽然很有帮助。但是考虑时间,目前的准则,做一款新产品研发的比例在30%以下,这样就保证了70%的工作是有时间保证。
Unity3D游戏UI开发经验谈的更多相关文章
- 孙陪你,了解它的权力--Kinect结合的发展Unity3D游戏应用开发
unity3d正在使用kinect三维模型数据控制(它切成脚本) 博主在做项目时须要利用kinect数据控制三维模型中人物的动作.但不是实时控制,而是利用之前获得的骨骼数据,直接控制.无需再利用脚本打 ...
- Unity3D 游戏前端开发技能树(思维导图)
如果做游戏也是一种游戏,那么这个游戏的自由度实在是太高了.(导图源文件链接:http://pan.baidu.com/s/1eSHpH5o 密码:qzl5) 最近要用思维导图软件Xmind把自己的思路 ...
- [Unity3D]Unity3D游戏开发之跑酷游戏项目解说
大家好,我是秦元培.我參加了CSDN2014博客之星的评选,欢迎大家为我投票,同一时候希望在新的一年里大家能继续支持我的博客. 大家晚上好.我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.c ...
- [Unity3D]Unity3D游戏开发之飞机大战项目解说
大家好,我是秦元培,欢迎大家继续关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 首先感谢大家对我博客的关注,今天我想和大家分享的是一个飞机大战的项目.这是一个比較综合的 ...
- 【Unity】1.3 Unity3D游戏开发学习路线
分类:Unity.C#.VS2015 创建日期:2016-03-23 一.基本思路 第1步--了解编辑器 首先了解unity3d的菜单,视图界面.这些是最基本的基础,可以像学word操作一样,大致能明 ...
- [Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果
大家好,我是秦元培.欢迎大家关注我的博客,我的博客地址是:blog.csdn.net/qinyuanpei.终于在各种无语的论文作业中解脱了,所以立即抓紧时间来这里更新博客.博主本来计划在Unity3 ...
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
- 从一点儿不会开始——Unity3D游戏开发学习(一)
一些废话 我是一个windows phone.windows 8的忠实粉丝,也是一个开发者,开发数个windows phone应用和两个windows 8应用.对开发游戏一直抱有强烈兴趣和愿望,但奈何 ...
- Unity3D游戏开发之连续滚动背景
Unity3D游戏开发之连续滚动背景 原文 http://blog.csdn.net/qinyuanpei/article/details/22983421 在诸如天天跑酷等2D游戏中,因为游戏须要 ...
随机推荐
- UVA - 213 Message Decoding (输入字符串并对单个字符进行操作的输入输出)
POINT: 关于表示一个编码:利用code字符数组表示一个编码字符,其中code[len][val]表示长度为len,二进制值为val的字符: 主程序如下: #include <iostrea ...
- Android开发了解——ODEX
ODEX是安卓上的应用程序apk中提取出来的可运行文件,即将APK中的classes.dex文件通过dex优化过程将其优化生成一个·dex文件单独存放,原APK中的classes.dex文件会保留.这 ...
- 使用jsonp跨域请求
一.异步对象,不能实现跨域请求 在站点A中访问站点B的数据: 站点A代码: window.onload = function () { document.getElementById("bt ...
- 提高查询速度:SQL Server数据库优化方案
查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 ...
- JAVA的StringBuffer类(转载整理)____非常重要的一个类,线程安全,不用每次创建一个对象,以及和String的区别
核心部分转载自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html StringBuffer类和String一样,也用来代 ...
- jquery实现asp.net 网页鼠标所在位置
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="mouseposition. ...
- Merge Into For Update Example
Merge Into article aa Using ( SELECT md5_id, Min(article_id) as Min_Article_ID from article )) and s ...
- Android系统简介(中):系统架构
Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries & Android Runtime.Linux ...
- spring Cache注解
如下:不能将缓存注解加在listCate(boolean isShowHide)方法上 因为spring是使用AOP的方法获取缓存,在一个bean中再去调用别一个方法,不会应用缓存 @Cacheabl ...
- 九度OJ 1104 整除问题
题目地址:http://ac.jobdu.com/problem.php?pid=1104 题目描述: 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除. 输入: 两个整数n(2 ...