山寨Unity3D?搜狐畅游的免费开源游戏引擎Genesis-3D

by admin on 2020年3月31日

3月23日我们在GitHub上发布了Unity引擎和编辑器的C#源代码,仅供Unity学习参考使用。

    在CSDN上看到了《搜狐畅游发布3D游戏引擎Genesis-3D
基于MIT协议开源》()的新闻,就把这个引擎下载安装了。

        
谈起“开源”,我相信各位可以说出目前非常火热的很多开源产品Linux、MYSQL、MangoDB、Memcached、Redis、JQuery、Hadoop、android……,就连曾经对开源持敌对态度的微软都开始拥抱“开源”:ASP.Net
MVC中把开源的JQuery做为默认的JS库、ASP.Net
MVC开源、支持Mono(可以看做“开源的.Net”)的发展、嵌入式系统.Net
MF开源。要知道微软曾经把“禁止参与任何开源项目”做为员工规范的,可见“开源”的影响力和作用已经越来越大。

为何如此决定

图片 1

         但是很多人对“开源”有着误解:

为了了解或改进自己的Unity项目,一直以来有用户对Unity
.NET程序集反汇编,我们的服务条款明确允许这样做。但反汇编有二大缺点:

        
用过Unity3d的朋友会发现,Genesis-3D的界面非常类似于Unity3d:主菜单都是“新建工程”、“新建场景”;在场景树中可以创建摄像头、立方体、粒子、灯光等;在左下角的“工程”中可以创建C#脚本、材质、精灵等;屏幕中间区域是场景编辑器,可以到“游戏”标签中查看预览效果;脚本编辑器也是使用MonoDevelop;也可以像Unity3d一样直接把游戏部署到Android、Windows
PC、IOS、网页等平台下,实现一次开发多平台部署的效果。

  • 有人在博客上发布一款自己开发的软件,底下评论就有人喊“强烈要求开源”;
  • 有人在博客上把自己开发的一个产品的源代码发布出来,标题就是“某某某开源啦!”;
  • 有人在博客上写一篇一款非开源产品和同类的开源产品对比的时候,底下评论也经常会说“开不开源对你有啥影响,所有源代码你都能看到,可你修改过这些源代码?”;
  • 有人认为“开源就是免费”;
  • 有人说“开源软件都是网民开发的,质量没有保障,还是商业性大公司开发的软件放心”;
  • 有人说“不敢用开源的东西,源代码大家都可以看到,那系统的漏洞不也就被人看到了?”。
  • 尽管这不难做,但过程还是十分麻烦。

  • 反汇编后导出的结果不会给出最初的注释和变量名,这样要理解代码会很困难。

图片 2

       那么什么是“开源”呢?通俗的讲,“开源”就是“功能大家一起完善,Bug大家一起改”的众包协作开发模式。以最著名开源操作系统Linux为例,“Linux之父”Linus开发出了Linux的初始版本,然后就把Linux以开源的形式交给开源社区去共同维护。没有一个像微软的Windows团队那样的大公司来维护Linux操作系统,都是开源社区的各位爱好者以及厂商去发展和维护Linux:

为了提供方便,不少社区成员不辞辛劳向GitHub仓库提供反汇编的代码。实话说,我们对这件事的感觉比较复杂。一方面,我们很高兴看到用户为壮大Unity社区提供实用的服务。但另一方面,这种行为从严格意义上说是违法的。虽然我们的服务条款允许进行反汇编,但服务条款里却不允许将这些代码发布。

     游戏脚本同样是和GameObject绑定,语法和类库有着浓重的Unity3d的影子,相似点太多了,感兴趣的可以下载下来感受一下。

  • 某个数学牛人A感觉Linux应该有科学计算的功能,因此就自己开发了科学计算的软件包提交到Linux,这样Linux中就有了科学计算的软件包;
  • 另外一个人B用了A开发的这个科学计算软件包,发现还缺少一个自己需要的功能,就把这个功能加到这个科学计算软件包中,然后代码提交到Linux;
  • 微软发现需要给Linux增加访问Windows文件系统的能力,就开发了Linux访问Windows文件系统的功能,提交到Linux,这样我们就可以使用Linux访问Windows文件系统了;
  • Novell公司想让.Net开发的程序能够运行在Linux平台下,就开发了开源的Mono;
  • Unity公司使用Mono开发跨平台的游戏引擎Unity3d,他们发现了Mono的改进点,就修改了Mono的代码,并且把修改后的代码提交回Mono;

我们经过良久的考虑,决定解决这些问题的最好办法只有一个:那就是我们自己发布源代码。

     像Unity3D一样,Genesis-3D也是使用Mono实现的跨平台,脚本使用C#,物理引擎使用Nvidia的Physx。

    
参与Linux的开发者中,有微软、Novell、RedHat之类的大公司,也有一些小公司及非营利性组织,更有很多的个人爱好者参与;有的贡献者可能贡献了上万行代码,有的贡献者可能仅仅提交了几行代码;有的贡献者增加了重要的功能,有的贡献者也许只是改了几个Bug……也许单个组织或者个人的贡献都不大,但是成千上万的水滴则汇聚成了大海,成就了Linux等这样伟大的开源产品。

要点解释

   
Unity3d可以支持游戏一次开发就部署到Android、IOS、Windows等平台下,而且Unity3d授权费比较便宜,只有几千美元,所以迅速成为了实战占有率非常高的游戏开发引擎,据2013年初Unity官方给出的数据,IOS上已经有55%的游戏使用Unity3d开发,Android上也有很多游戏使用Unity3d开发。

   
如果没有开源,那么系统的所有的功能都要等着它的开发厂商来提供;如果没有开源,系统的Bug只能等着开发厂商来修复;因为Windows不开源,所以除非微软提供,否则我们无法把Windows装到智能电视里;因为Linux开源,所以我们可以把Linux移植到手机中运行;因为.Net
Framework不开源(真正的),所以无法在Linux下运行.Net程序;而因为Mono是开源的,我们可以借助Mono来实现使用C#/.Net开发Android、IOS应用(MonoTouch是使用C#/.Net开发IOS应用的技术,Mono
For
Android是使用C#/.Net开发Android应用的技术,而Unity3d则是使用C#开发跨IOS、Android、Windows等平台的游戏开发技术);因为Android开源,所以不需要谷歌提供,就有人把Android移植到X86架构CPU下,这样我们就可以在x86
PC机上安装运行Android操作系统。

为了防止产生误解和标题党,我们认为需要花些篇幅具体解释一下我们的做法。

    这次搜狐畅游推出的Genesis-3D更给力,基于MIT协议开源引擎,并且游戏开发者可以免费使用、随意修改引擎代码。如果Genesis-3D官方的社区支持足够给力,那么游戏开发者将会有了更好用、开源且免费、国产的游戏开发引擎。

     开源最大的魅力就在于不依赖于某个厂商,大众都可以修改代码以满足自己的需要,千万个“自己的需要”就汇聚成了伟大的产品,任何违背这个理念的开源都是“伪开源”。

我们不会将Unity开源**。**抱歉,我们也没有开源的计划。我们并非不喜欢开源,事实上我们其实有很多开源项目,例如:UI系统,Networking等。请参考:Unity开源项目参与指南。

   
Genesis-3D源代码基于MIT协议发布,不过到目前为止,Genesis-3D还没有对外开放,据官方论坛帖子说明(),代码将会在12月上旬发布。不过发布形式是提供zip包下载,看来还是“给你看代码”的“开源项目”,并没有提供官方的源码控制服务器,这样社区很难去贡献代码了。如果把代码托管到CSDN的Code平台、github、codeplex等会更好,不知道官方以后是否会做这件事,毕竟不接受社区贡献的开源项目并不是真的开源(参考我的文章《“开源”是什么,能吃吗?》)

    如果只是可以“看到代码”并不是真正的开源。某个人把自己开发的软件源代码在网上公布出来了,但并没有通过git、svn等把源码管理起来,更没有人负责对其他人对这个软件的修改代码进行汇总、管理,只能是有的人感兴趣下载下来“自己修改自己用”并没有把修改贡献给社区,因此并没有体现出开源的社区价值。比如微软发布.NET
Framework
源代码采用的就是Microsoft Reference License协议,这个协议最明显的特点是“允许用户看源代码,但不许修改和分发,只许参考”,因此不能算作真正意义上的开源。而微软的ASP.NET
MVC则是基于Apache协议发布的,“社区中的所有人都能够参与进来,对签入的代码、缺陷修正、新特性开发提供反馈,并且可以使用每日构建的最新版本源代码和测试来构建和测试这个产品”因此ASP.Net
MVC才是真正的开源项目。

如果将来我们再也不需要源代码,而且这样做不会影响我们的业务,我们会开源所有Unity的代码。但在可以预见的将来中,我们会保有主引擎的所有权,C#参考源代码会在特定协议下发布,用户仅可以阅读代码,不可以修改代码。请查看完整的协议文本,请先了解所有细节以免触及底线做违法的事。

    很多人见到Genesis-3D说的第一句话就是“这不就是山寨的Unity”吗?下面是Unity的界面:

    
以一个我的亲身例子来说,多年前,我在网上发现了一款Eclipse的反编译工具JodeEclipse很好用,但是升级到新版本Eclipse以后这个JodeEclipse就无法使用了,因此我就下载了JodeEclipse的源代码,修改了代码使其能够运行在新版本Eclipse下,把修改后的代码提交上去并且发布了一个Release,后来发现很多人都在用我发布的这个新版本。再比如前两年我用的一款软件(名字已经忘了),发现它没有中文版,因此我就根据它的多语言的实现机制制作了中文语言包,并且提交了上去,新版本就有中文版了。

我们也不会接受C#参考源代码的合并请求。我们既没有法律框架也没有组织框架来处理这些合并请求,更不用说准备合并请求这个行为本身就已经违反了参考协议。

图片 3

    
开源是一种所谓“众包”的工作模式,因为有了开源我们才有了这样精彩的技术世界。曾经和开源格格不入的.Net社区现在也已经因为开源理念的加入而变得丰富多彩起来,Log4Net、Json.Net、lucene.net、NPOI、Spring.Net、NHibernate、ASP.Net
MVC等成熟的老牌开源技术自然不用说,Mono
系更是大放异彩让.Net开发者过了一把跨平台的瘾,包括使用Mono在.Net下运行ASP.Net网站、开源的游戏开发引擎MonoGame以及基于Mono的商业引擎Mono
For
Android/MonoTouch/Unity3D。当然更希望.Net开发者不要把自己的视野局限在微软社区,MYSQL、Memcached、Redis、Nginx、Linux、MongoDB等优秀的开源技术同样是可以被.net技术社区的人灵活运用在解决方案中(参考我之前写的一篇文章《哪个家伙说“网站去.Net化”?》)。

我们希望能从中了解到C#参考源代码有哪些错误,请使用Unity Bug
Reporter来汇报错误,不要只是在GitHub上提交合并请求。注意,使用Unity Bug
Reporter来汇报错误时候,需要详细描述问题,指出在参考源代码中有哪些与问题相关的代码行或文件。

   
虽然官方一直说“Genesis-3D是搜狐畅游投资3000万美元自主研发,,从未对任何引擎进行抄袭或侵权。Genesis-3D在遵守开源协议的基础上,最底层的线程、内存等管理库使用的是Nebula3和Ogre的部分代码;中间层使用了模块化设计,包括MyGUI、OpenAL、PhysX等第三方的开源库或者商业库;上层使用组件化的设计思想;编辑器使用了WPF进行界面开发,同时使用SWIG来暴露C++接口供C#使用。作为一款开源引擎,我们使用MIT协议。我们大量使用了开源社区的产品,遵守并按照授权协议公开源代码以及对于第三方开源库的修改。”有一些人也辩解“只是设计器界面上吸收了Unity的灵感”,不过据小道消息(从微博看到的消息,本人不为此负责,请勿转发抄500):搜狐畅游曾经购买过Unity3d引擎,并且做为大客户获得了Unity3d的源代码(注意Unity3d不是开源的,花大价钱买商业引擎送源代码是一个行业惯例),开发Genesis-3D过程中曾经组织开发人员加急把Unity3d的源代码改的让人抓不到抄袭的证据。据说搜狐畅游开源Genesis-3D的原因也是因为使用的Ogre、MyGUI、OpenAL的这些开源项目,由于开源协议的要求所以不得不开源(不过,总比那些使用了开源项目还不遵守开源协议的臭流氓企业强多了)。再次声明,仅是微博上看到的小道消息,作者杨中科不对此小道消息负责。

      拥抱开源、利用开源、贡献开源,让我们的技术生活更加丰富多彩!

源代码的用意

  
 当然我更愿意相信这是一款纯国产的游戏开发引擎,用国产,我骄傲,还免费,更骄傲!

如鹏网.Net培训班正在报名,有网络的地方就可以参加如鹏网的学习,学完就能高薪就业,点击此处了解

所有进入UnityEngine和UnityEditor托管程序集中的C#源,其每个版本都会从Unity
2017.1开始。在未来的日子里,这个库将会在每次新版本发布后不久进行更新。

   
还有一个好消息,基于Genesis-3D开发的游戏,如果通过搜狐畅游的渠道进行代理,畅游优先代理运营。搜狐畅游免费开放Genesis-3D的目的也是让游戏开发者环绕在他的周围,由搜狐畅游打造一个游戏生态链,就像触宝科技通过Cocos2d-x打造的平台一样。中小型游戏开发商使用Genesis-3D没问题,但是一些大的游戏公司我想可能还不会认Genesis-3D的帐的,毕竟大的游戏公司更倾向于使用Cocos2d、unity、ogre等中立的引擎或者自主研发的引擎。

 

通过查看每次提交,你可以发现在后续版本之间发生了哪些变化。例如:你可以看到Unity
2017.3.1 patch 2的更新中修改了这些文件:

   
无论怎样,对于搜狐畅游发布Genesis-3D免费且开源,我还是顶一个!无论是Unity3d还是Genesis-3D都是主要使用C#做脚本语言,对于一些C#/.Net程序员转行做游戏开发都是一个好的开始!希望Genesis-3D能走好脚下的路!

 
  三年前只要懂“三层架构”就可以说“精通分层架构”;现在则需要懂IOC(AutoFac等)、CodeFirst、lambda、DTO等才值钱;

图片 4

如鹏网.Net培训班正在报名,有网络的地方就可以参加如鹏网的学习,学完就能高薪就业,点击此处了解

    三年前只要会SQLServer就可以说自己“精通数据库开发”;现在则需还需要掌握MySQL等开源数据库才能说是“.Net开源”时代的程序员;

下载源代码及参考信息

 

    三年前只要会进行用户上传内容的安全性处理即可;现在则需要熟悉云存储、CDN等才能在云计算时代游刃有余;

  • Unity引擎及编辑器C#源代码地址:

  • Unity开源项目参与指南

  • 服务条款及完整协议            
     

 
  三年前只要懂“三层架构”就可以说“精通分层架构”;现在则需要懂IOC(AutoFac等)、CodeFirst、lambda、DTO等才值钱;

    三年前只要掌握Lucene.Net就会说自己“熟悉站内搜索引擎开发”;现在大家都用ElasticSearch了,你还用Lucene.Net就太老土了;

小结

    三年前只要会SQLServer就可以说自己“精通数据库开发”;现在则需还需要掌握MySQL等开源数据库才能说是“.Net开源”时代的程序员;

    三年前发邮件还是用SmtpClient;现在做大型网站发邮件必须用云邮件引擎;

以上就是这篇文章的所有内容。请享受将其用于Unity学习参考的过程。并且继续支持Unity吧!

    三年前只要会进行用户上传内容的安全性处理即可;现在则需要熟悉云存储、CDN等才能在云计算时代游刃有余;

    三年前缓存就是Context.Cache;现在则是Redis、Memcached的天下;

来自:Unity官方微信公众号

    三年前只要掌握Lucene.Net就会说自己“熟悉站内搜索引擎开发”;现在大家都用ElasticSearch了,你还用Lucene.Net就太老土了;

    如鹏网再次引领.Net社区技术潮流!点击此处了解如鹏网.Net最新课程

    三年前发邮件还是用SmtpClient;现在做大型网站发邮件必须用云邮件引擎;

    三年前缓存就是Context.Cache;现在则是Redis、Memcached的天下;

    如鹏网再次引领.Net社区技术潮流!点击此处了解如鹏网.Net最新课程

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图