3人从小公寓创业,到世界最大引擎公司,Unity创始人谈14年的心路历程

Unity创始人David Helgason在Unite 2017 Shanghai期间接受了游戏陀螺的专访,动情地讲述了这14年来从3人在公寓创业,到成为千人规模的世界级公司的心路历程,以及对Unity未来的方向展望。下面就来了解一下这位北欧青年的创业史吧。

“我们不仅仅要承受发工资的压力,同时因为很多客户在Unity上做游戏,如果Unity失败了,那么客户也就失败了,所以在过去的12年,我们非常紧张,非常有压力。”Unity的创始人David Helgason(以下简称“David”)说道。

公司越大,所承担的社会责任也就越大。对于Unity的认识 ,应该大多数人都知道它是全球最大的游戏引擎,市场占有率达到70%以上,全球拥有1000多名员工。不过对于这样一家大型公司,却很少有人关注到它的过去。

3个人,从做游戏到做引擎

在创立Unity之前,David曾经有过几次创业经历。19岁开始做游戏,经历了几次退学,创立了几次公司,但是几次都不是很成功。

故事从3个来自不同国家,却因游戏而聚集在一起的小伙子说起。

Unity的创始团队一共有3人:David;Joachim Ante,现任CTO;Nicholas Francis,曾经是CCO,不过已经离开Unity,创立了自己的游戏公司,用Unity在开发游戏。他们分别来自冰岛、丹麦和德国。

“Joachim和Nicholas都很喜欢做游戏,在网上认识了对方。我是Nicholas的老朋友,他当时问我想不想加入这个团队,我想都没想就答应了。”David说道。

就这样,3人在丹麦哥本哈根的一间狭小的公寓中开始埋头做游戏,团队取名为OTEE(Over the Edge Entertainment)。

David展示了OTEE最早想要使用的Logo,那是一个类似于路标的三角形符号,中间是一辆车飞跃过小山丘,当然最后这个Logo并没有使用。

“当我们三个人决定要干一番事业时,我们都很兴奋。当时很多游戏公司的名字都比较出格,比如有叫‘RockStar’的,有叫‘Bungee’的,所以叫‘Over The Edge’对我们来说非常合适。”

“一开始我们做了非常多的游戏原型,也推出过一款游戏产品,但是并没有成功,不过积累了一些技术。当时我们在思考这一技术的意义在哪,我们认为我们要做一个非常容易使用、非常优雅的引擎。后来我们决定要转型做软件公司,因为引擎非常重要。”

OTEE原本就是一个游戏中间件,后来他们把它定义为“游戏开发工具”,游戏引擎也就由此而来。

“然后我们决定要变成一家技术软件型的公司,名字也改成Unity,因为原本的名字不再适合了。当时的软件公司名字都叫‘Microsoft’、‘Adobe’、‘Apple’。Unity寓意融合一切。”

Unity创立时,David仅25岁。

危机四伏,12年的紧张和压力

创业是过独木桥,而且要承受常人难以忍受的压力和焦虑。Unity一路走来也并非顺风顺水。虽然找到了方向,但是如果要为一个行业创造一个工具,第一件事就是要了解这个行业,而他们当时并不了解这个行业。

为了快速了解游戏行业,3人开始恶补。90年代的时候,并没有现在随处可下载的电子书籍,也没有各种便利的教程、数据,他们只能通过一些游戏开发者杂志来获取信息。不过,这并不是最难的。

“刚开始创立公司的时候其实挺困难的,不止没钱,甚至连食物都没有。但是当我们找到一些客户的时候,我觉得无论如何都要支持他们。”

14年中,Unity曾经遭遇过多次危机,特别是在创业初期,只要有一个人选择放弃,那Unity可能就不会存在了。幸运的是,CCO – Nicholas是在团队比较稳定之后才离开,那时候已经有了400人的规模。

2006年,Unity遭遇财政危机,虽然没有到破产的阶段,但是几乎发不出工资。在那个时期,Unity核心人员几乎都放弃拿工资来保证让公司正常运转下去。

2007年,Unity在旧金山举办了第一届Unite大会,当时公司只有10个人,8个雇员,两个实习生。不过他们依然想把活动办成全球的大会,结果只卖了32张票,来了32个人。“我们开了三天的会,包括技术的内容和Keynote的演讲,我记得有人从日本从以色列远道而来,当然也有从中国和印度来的嘉宾。”虽然人少,场面非常尴尬,不过David却觉得非常自豪,因为对于他们来说,这是满怀志向把这个公司打造成国际化大公司的第一步。

此外,2010年苹果改变了一些针对开发者的规定,也对Unity造成了巨大的影响。由于开发者的应用发布在iOS平台或者Android平台,平台一旦发生任何改动,引擎方都需要快速进行调整,不然会影响到开发者。

第一次给员工发工资时,David感受到了他们的责任和压力。而更大的压力则是来自于这家公司所承担的社会责任。

“我们不仅仅要承受发工资的压力,同时因为很多客户在Unity上做游戏,如果Unity失败了,那么客户也就失败了,所以在过去的12年,我们非常紧张,非常有压力。”

让所有人都能做游戏

Unity引擎到现在,已经迭代到5.6版本,他们的目标也从让游戏开发变得简单变成了让所有人都能做游戏。

他们给Unity定了三个原则,现在做的一切都围绕这三个原则。

第一个希望能让开发大众化,就是每天都需要专门关注将最有效果的一些最强大的开发工具给到开发者。

第二是解决开发中的困难,解决困难的问题也就是大家不需要面对这些问题,包括我们当今的这些问题。

第三个原则是驱动成功,帮助开发者变现。

游戏行业发展至今,已经一个能够稳定增长的成熟产业,特别是手游,在移动互联网爆发后,每年都以惊人的速度增长,而Unity也借此奠定了其在产业中的地位,抢夺了整个游戏产业中70%的份额。

谈到如何让公司可持续发展时,David称,做一个引擎本身在技术上并不困难,但是一直发展下去却需要很小心。

“自从Unity创立以来,我们就一直对公司的走向十分的谨慎。我们确保自己处于盈利的状态,在获得盈利的同时不会从客户身上过分索取,保证自己有充足的现金,Ads和Analytics的服务,这些都是为了确保我们能够持续的发展下去。”

游戏是最大的出口产业

2016年,用Unity开发的游戏下载量达到160亿次,覆盖26亿台独立设备。在David看来,游戏是一个可以无限延伸的产业,游戏的技术也会被用到各行各业中。

“游戏技术的发展是非常前沿的,成长起来后应用十分广泛,比如说在VR和AR中。可能十年之前,技术的出口是航空航天、军事这些领域,它们的技术会被不断应用在其他的领域。现在我认为最大的出口者是游戏产业。”

同时,技术的“消费者化”也是一大趋势。“将来会有更多的资金流入这些科技领域。以前在军事上可能用的都是非常昂贵和高端的电脑,而现在大家都开始用iPad等产品。像游戏引擎就是这样一个通用的技术和产品,因此能够被应用在很多其他的领域范围内。”

未来的5到10年

在游戏产业中站稳脚跟后,Unity当然有着更大的野心。而对于未来的5-10年,David有更长远的思考。

游戏之外的突破

一直以来,Unity似乎聚焦在游戏产业上,不过实际上其早已不是单纯的游戏引擎。

“我觉得每年Unite都会给我惊喜,可能最早期,Unity这些工具除了游戏之外,是应用在建筑可视化设计,或者培训模拟方面,但是这几年我们看到的一个趋势,3D互动产品的范围不断扩大,几乎进入人们生活的方方面面,甚至会和一些生物化材料去合作,变成你身体的一部分,这些对于我们来说,3D的技术也好,进入到各个领域,各个方面的产品都是可以预见得到。”

现在用Unity引擎可以制作动画、VR/AR游戏以及其他教育、医疗、房产等诸多行业应用内容。

屏幕限制将解除

“Unity这个软件产品上的计划一般是1.5 – 2年,哲学性的发展会更加长远。我们相信,许多游戏应用上的限制,比如说屏幕,会在未来被解除。如果展望未来5 – 10年,我们会看到神经学方向的一些发展,现在已经有很多这方面的研究是,只是还不太成熟。我认为接下来3D的产品、用Unity做的产品、开发者做的产品会不仅仅应用在娱乐上,而是会成为这世界真实的一部分。”

在Unity的规划中,VR和AR是很重要的一部分。“在未来VR和AR呈现出的都是一个完整的3D空间。我们相信在未来很多3D和超越3D的内容都会是由Unity产生的,因此我们需要把这一工具打造的非常完美。我们在R&D上投入很多,力求在技术上想得更加长远。”

虽然针对VR/AR的开发工具并不多,不过在VR和AR内容开发市场上,Unity的市场份额分别占到了70%和90%,稳稳占住了下一代平台入口。

“每次在人们用的平台变化的时候,是机会最多的时候。希望大家现在认真工作,不要睡太多,因为有很多公司会在这个阶段死掉。”对于创业者们,David的建议沉重而中肯。

结语

“是否想过Unity会成为千人规模的大公司?”

“从没想过。之前我曾经问过我们的CTO Joachim有没有想到过我们会发展到今天的规模,他说,我从来没想到过我们会有超过50名程序员,这对我们来说已经是一个很大的数字了。而现在我们有超过400多名程序员。”

David在Unity任职CEO 11年,虽然现在退居幕后,却一直在引导着Unity的方向。

当被问道“是什么让你这么多年坚持下来?”

“Eat Bitterness!”David简单地回答道。这两个字里面包含的艰辛或许创业者们会更加感同身受。

以上就是Unity创始人David Helgason的创业经历,我们可以看到一位怀抱梦想的青年,在追求梦想的道路上那些代价与收获。我们相信有很多开发者,可能也处于David Helgason曾经的轨道上,愿您怀抱着坚持,让梦想渐渐地发光。

转自:https://www.sohu.com/a/141278917_280780

MacOS下Unity与VS Code安装配置

用了这么多年MonoDevelop,Mac上从不支持中文输入到后来支持中文输入,突然有一天发现,Unity默认不带它玩了. 🙁
它虽然启动慢了点,滚动视图卡了点,输入文本迟缓了点,也没什么不好的.是吧.哈哈.

加入VS Code的怀抱吧, Visual Studio Code是微软VS开发者工具中新的应用,它跨平台,并且对所有开发者开发免费下载.

Unity安装这里就不表述了,先去官网下载VS Code:

https://code.visualstudio.com

安装它,然后安装mono框架,为了简化mono安装,可以先配置MacOS下的安装包管理神器brew,在终端命令行输入下列命令:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

回车后根据提示耐心等待brew安装完成(需要网络).

brew安装成功后继续在终端命令行执行

brew install mono

即可完成mono框架的安装.

然后启动Unity,在选项菜单中设置代码编辑器为VS Code,

Unity中新建一个CS脚本并双击打开,启动VS Code,在VS Code里选择”扩展”.

安装Unity调试插件.至此,VS Code设置完成.可以使用了.

原创文章,转载请注明来自1vr.cn

使用AndroidStudio为Unity5.*搭建安卓开发环境

使用Time capsule恢复了系统备份后,发现还是存在一些问题的,比如QQ聊天记录文件错乱,然后又发现了Finder侧边栏有异常,收藏栏会莫名其妙的消失,去Finder偏好设置里勾选项目,仍旧会出现这个问题,似乎配置文件变成了只读.最烦恼的Safari上传文件时打开文件选择窗口时侧边也是没有收藏栏的,瞒麻烦的.
后尝试删除相关配置文件重启后解决了问题,方法如下:
进入~/Library/Preferences目录,找到

com.apple.finder.plist
com.apple.sidebarlists.plist

这两个文件删除并重启系统即可修正这个问题,真是奇怪.
突然又想找Mac上类似之前在Windows上用的很爽的TC(total commander)软件,终于找到一个靠谱的,叫”Commander One”,推荐Mac用户试试这分栏式文件管理器,当然要自定义快捷键才用起来舒服,默认的键设几乎没法用.

之前Unity开发Android的环境都是手工搭建的,装eclipse又装sdk的,发布apk也没有问题就一直没更新环境,前几天才看到早就有androidstudio这么一套工具,闲着没事更新一下吧,当时用的Unity版本为5.5.0,结果怎么都提示找不到sdk:

折腾了许久才找到原因,是因为sdk tools的版本过新,而Unity5.5.0中是不支持v26.0.2版的,只能把sdk tools换成v25版本才可以,我最后用的是25.2.5这个版本.可以从网上单独下载这个版本,然后替换android sdk目录下的tool目录文件.

最后别忘记检查Unity的偏好设置中sdk路径指定是否正确,要指定到sdk的根目录,而不是sdk下面的子目录,也就是说不是tool等目录.

再Build就不会有问题了.

最近在看机械键盘,之前一直觉得机械键盘只为自己爽不顾他人感受,可竟然有点想反正大家都吵了,一起吧,看谁狠的意思.吐槽下新款苹果本子键盘和苹果二代蓝牙键盘,键程短的可以,为了追求薄而忽略了很多本应保留的东西,合适吗?!还好这两个设备目前我都没有买.

NGUI的Scrollview自动布局及手动布局Reposition

在处理NGUI的Scrollview滚动视图动态添加及自动布局的事情,遇到了一些问题以及弄清了一些问题,写在这,方便他人.

有关Scrollview动态添加,拖拽到Scrollview尽头时动态的添加一批新的item项,网上查了一下,就和在百度上查”如何去除衣服上的水晶泥”一样,都是一水的模板式回答,毫无用处.别鄙视我用百度,没办法,不翻墙的情况下,搜中文关键字,百度比bing强点,英文的,那拜拜百度吧.

回到正题.先说动态添加,其实一般就是初始化prefab到场景,然后置其父对象为Scrollview就可以了,而NGUI提供了更直接的命令,就是:

NGUITools.AddChild(父对象,预设体);

它直接就把预设初始化并放在父对象下级了,省去了若干麻烦(初始化,位置,尺寸等等等).

拖拽到Scrollview尽头时动态添加新项,那我们要知道什么时候到了尽头,得到”已到尽头”的这个状态就可以用上面的AddChild添加新的item项了.可以把UIScrollView.onDragFinished事件委托过来,当Scrollview发生拖拽时它会执行一次AddChild,如果不加其它条件判断每完成一次拖拽,就会添加一次新项.

	void OnEnable(){
		UIScrollView.onDragFinished += OnDragFinished;
	}

	void OnDisable()
	{
		UIScrollView.onDragFinished -= OnDragFinished;
	}

	void OnDragFinished()
	{
		NGUITools.AddChild(父对象,预设体);
	}

当然这并不是我们要的,拽一次就添一次太可怕了,我们只是想拖拽到Scrollview尽头时添加,那有个简单的办法,在Scrollview组件上有ScrollBars设置,如果你需要滚动条就按自己设计添加个滚动条,如果不需要滚动条,那么你就随便添加个Sprite再给它添加个UIScrollBar脚本就行了,看心情把它”隐藏”起来,我们这里主要用ScrollBars的值,在你想要判断拖拽位置的方向上对应取值就好,比如你要鼠标往左滑Scrollview到尽头添加新项,那就给Scrollview的ScrollBars中的Horizontal赋个ScrollBar控件就好.

然后我们脚本里取ScrollBar的value值,到某个值的时候,进行添加新项,如下:

void OnDragFinished()
	{
		if(UIScrollBar.value>0.9f){
			NGUITools.AddChild(父对象,预设体);
	}

搞定了动态添加,我们来说说布局的问题,NGUI提供了两个布局脚本(Grid,Table),像画田字格,设定好参数后,布局脚本下面的item项都会按格子依次排列好,不用再苦x的码位置了.这两个布局脚本都支持在行和列的方向上有规律的布局,差别在于Grid是固定宽高的单元格,无论格子里内容是什么,Table有点像HTML里面的Table,你可以设置单元格间距,但是它受格子里内容影响,如果一列中有个单元格里的内容特别宽,那整列都将是这个特别宽的宽度.看文字比较难理解,自己动手比划一下就清楚了,因为我也是动手比划弄清楚的.

我想要横着的ScrollView,三行Item,鼠标左滑到尽头自动添加新项,所以我选用了Grid,在Arrangement中选用Vertical对齐方式,RowLimit设置为3,以及根据需要设置单元格(Cell)宽高,可以随意扔一些Sprite到Grid子集,Play一下,就可以看到自动布局的结果了.

当我们用NGUITools.AddChild(父对象,预设体)时,Grid并不会自动布局,它在等我们发送指令,手动布局的命令发出后,Grid将进行一次布局,帮我们将现有的item项排列的整整齐齐.这个指令是什么呢?有两种,如下:

UIGrid.Reposition();
UIGrid.repositionNow=true;

AddChild后,上面的指令任选一条执行一次就完成了布局,那么你也一定像我一样好奇它们两个的区别,其实他们也没什么太大区别,两条指令执行后,最终都是执行Reposition(),而repositionNow这个变量赋值后,Update中会判断它是否为真,为真则执行一次Reposition(),也就是说UIGrid.Reposition();是马上进行排序布局,而UIGrid.repositionNow=true;是在执行后,Update进行下一帧时进行排序布局,接着NGUi会将repositionNow重置回false.具体用哪一个,看你自己了.

另外有些教程用到了”NGUITools.SetDirty()”,字面理解是标记当前对象已经更新让Unity理解刷新状态什么的,但是在这个环节用它和不用它我没看出区别,有了解详情的可以评论里指教一下.

今天就到这里,晚安!

原创内容,转载请注明来自 http://1vr.cn , By XK.