赞美之外,Unity引擎3D引擎存在什么弊病?

article/2025/11/4 23:15:10

由于手游业界各大公司对该引擎的认可和追逐,自2013年开始,Unity大会成为了行业内最火爆的大会之一。在信息丰富的网络上,我们可以看到满屏的Unity教程和优点的介绍,但这款引擎是否存在着弊病呢?

带着这个问题,我们采访到了广州一家游戏研发公司的程序人员,从他们的角度来看待Unity3D引擎的现存问题。
 


引擎运行效率问题制约2D产品应用

Unity3D引擎的效率问题,这个效率是指运行效率,不是说开发效率,也就是说游戏运行时的开销。unity的跨平台的是因为它基于Mono的运行环境,导致引擎的开销很大,如果手机的硬件够强大还好,如果是中低端的手机还是有点吃力,也导致耗电量比较大。
 


这种情况下制作3d游戏还好,如果制作2d游戏的话,就变得有点让人难以接受了。

mono是由Nowel公司发起的基于.net的一个开源工程,由一个C#的编译器和一个CLR运行时和一组类库组成。C#是微软的编程语言,跟java不一样, C#只能用于windows操作系统。mono实现了能够用C#语言进行程序设计,并能够编译成在多个平台运行的程序,比如能够在linux上和macos上运行。

而像cocos2d这个引擎是用c++语言编写的,编译出来的代码通过直接调用系统底层的c语言编写的lib库来运行,编译出来的代码相当于binary代码,也就是二进制代码。但是unity的代码和java的代码类似,java编译出来的代码需要通过java虚拟机运行,在android平台上通过dalvik虚拟机运行;unity的代码则需要通过mono的CLR来执行,所以开销肯定是要大一些的。

另一个不能制作2D产品的原因是unity虽然支持2d,但是是通过二手游戏购买设定摄像机为正交摄像机并固定摄像机的位置来实现的,然后使用了box2d物理和2d碰撞等效果,实际上的开销虽然比3d游戏要小,但是整个GameObject底层还是3d环境的,所以对于一个2d游戏来说还是过大。

目前国内很多小2d游戏的推广渠道都对游戏包的大小有要求,要求包越小越好。但是unity一个空工程生成apk文件就有7-8M,如果是大型的3d游戏可能不是很大,可是对于小单机游戏制作来说真的很头痛。该公司之前用unity开发2D游戏,多次被渠道评价为安装包过大,而且很难想办法减小包的体积。

代码调试环节“所见即所得”优缺点并存

Unity的调试和编辑器是绑在一起的,通过附加到编辑器的进程上进行代码调试,编辑器没有和调试运行环境分离。这种情况下在调试的时候容易导致编辑器崩溃,要是保存了工程还好,要是没有时不时的保存工程,很可能会造成工程丢失。


因为Unity的所见即所得,这种方式有他的好处,开发者可以很方便的在编辑器中看到游戏场景的整个情况,所以unity就在编辑器里面整合了运行环境。

该程序员表示:“其实我觉得编辑器里可以有一套,但是调试的时候最好还是跟编辑器分离开来。既然是调试,谁都没有办法预测到代码到底有哪些问题,哪些问题会导致运行环境崩溃,或者死循环。这个地方我觉得挺关键的,ctrl+s可以有保障一点,但是有时一会儿没有发现代码问题在哪里的时候挺烦人的。应该用过unity的人都碰到过吧,我看我们公司的员工我看至少都碰到过这个问题。”

相比之下,cocos2d的场景编辑器是cocos studio,代码编辑windows下一般用vs,mac下用xcode。调试运行在windows下编译成exe文件调试,在mac下一般使用iphone或者ipad模拟器。

这个性能是优点也是缺点,也是Unity比较引以为傲的一个方面。在程序编辑过程中,可以很直观的看到游戏场景和游戏中的物体的位置。在调试的时候也可以暂停游戏,然后看看物体是否按照自己想象在运动。但问题恰恰就在于,不是每一个程序员的代码都是一次成型的产品,也不是每一个程序员都有不断保存的好习惯。人非程序,但程序应该可以更加人性化。

代码挂载并不是每一个程序员的最爱

代码挂载就是指将代码挂在一个物体之上,这对于初学者来说是极其便利的操作,但对于成熟的程序员来说却存在问题。

这实际上是代码驱动的开发模式,对于小型的简单的游戏这确实方便,但是当项目变大的时候弊病就显现出来。
 

 


如果项目很大,比如说网络游戏,还得用经典的数据驱动模式。否则代码驱动的结果就是bug频繁,解决起来错综复杂。总的来说代码驱动设计模式有点类似于写日记,数据驱动设计模式则是以数据为导向,增加代码的健壮性和可维护性,可重用性。

这种模式很容易让开发人员把游戏逻辑和其他行为代码混到一起。尤其是新手程序员经常是在频繁挂代码之后造成各种bug。严格来说这个方面不能说是它的缺点,跟程序员也有很大的关系。一个成熟的程序员会用各种经验规避这些问题,但一个不够熟练的程序员却无法做到。

简而言之,挂代码的方式对于刚刚开始用Unity开发的程序员来说便于入手制作独立小产品,但难于精通并融入复杂的大工程。在此类方向上,需要有经验的大型工程师指导。


http://chatgpt.dhexx.cn/article/4b8GsfU9.shtml

相关文章

Unity3d是目前主流的游戏开发引擎

Unity3d是目前主流的游戏开发引擎,它提供了一个整合的编辑器、跨平台发布、地形编辑、着色器,脚本,网络,物理,版本控制等特性。Unity3d可以开发桌面版、web版、手机版的游戏,是一个非常理想的三维游戏开发平…

Unity3D 游戏引擎之构建简单的游戏世界(三)

Unity3D 游戏引擎之构建简单的游戏世界 雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyusong.com/archives/473 创建游戏地面 创建一个新的游戏工程名称命名为FirstGame,场景…

Unity3d 引擎原理详细介绍

体系结构 为了更好地理解游戏的软件架构和对象模型,它获得更好的外观仅有一名Unity3D的游戏引擎和编辑器是非常有用的,它的主要原则。 Unity3D 引擎 Unity3D的是一个屡获殊荣的工具,用于创建交互式3D应用程序在多个平台.Unity3D由游戏引擎和…

Unity3D游戏引擎最详尽基础教程

关注公众号 风色年代(itfantasycc) 200G Unity资料合集送上~ 转自:http://blog.sina.com.cn/s/blog_7c336a8301013son.html 我一直向所有想做游戏的朋友推荐Unity3D,为什么呢?首先是因为专业,Unity3D非常强…

30分钟了解所有引擎组件,132个Unity 游戏引擎组件速通!【收藏 == 学会】

前言 🎬【全网首发】 | 30分钟了解所有组件,132个Unity 游戏引擎组件速通!一、Mesh 网格1.Mesh Filter2.Mesh Renderer3.Skinned Mesh Renderer4.Text Mesh5.TextMeshPro-Text 二、Effects 特效组件1.Particle System2.Visual Effect3.Trail …

Unity 3D 物理引擎简介 || Unity 3D 物理材质|| Unity 3D 力(AddForce)

Unity 3D 物理引擎简介 早期的游戏并没有强调物理引擎的应用,当时无论是哪一种游戏,都是用极为简单的计算方式做出相应的运算就算完成物理表现,如超级玛丽和音速小子等游戏。 较为常见的物理处理是在跳跃之后再次落到地上,并没有…

Unity游戏引擎介绍及相关学习资源

Unity(游戏引擎)一般指Unity3D 官网: https://unity.com/ 手册:https://docs.unity3d.com/Manual/ Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的…

垃圾收集器及算法

一、垃圾收集算法 1.分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法,只是根据对象存货周期的不同将内存分为几块。一般java堆分为新生代和老年代,可以根据各个年代的特点选择合适的垃圾收集算法。比如在新生代中,每次收集都会有大量的…

垃圾收集器-CMS

CMS垃圾收集器 文章目录 CMS垃圾收集器前言一、CMS是什么?二、CMS收集的步骤1.初始标记2.并发标记3.重新标记4.并发收集 三、核心参数四、总结 前言 相信大家都或多或少的了解过hotspot虚拟机的垃圾收集器,无论是初代的serialGc(单线程的垃圾收集器)&am…

Java经典垃圾收集器

经典垃圾收集器 1.Serial收集器2.ParNew收集器3.Parallel Scavenge收集器4.Serial Old收集器5.Parallel Old收集器6.CMS收集器7.Garbage First收集器 1.Serial收集器 Serial收集器是最基础,历史最久远的收集器,是一款新生代收集器,新生代收集…

GC 垃圾收集器

GC 垃圾回收算法 和 垃圾收集器之间的关系是什么呢 ? GC算法 (复制 / 标清 / 标整 ) 是内存回收的一种思想 , 垃圾收集器就是 GC算法 的落地实现我们知道没有最完美的 GC算法 , 因此目前为止也没有完美的垃圾收集器 , 只是针对不同的情况选择最适合的收集器来进行分代收集 主要…

7种垃圾收集器

如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据…

垃圾收集器简介

HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。 Serial(串行GC)收集器 Serial收集器是一个新生代收集器,单线程执行&…

【JVM】7种经典的垃圾收集器

文章目录 1. 垃圾收集器概述2. Serial 收集器3. ParNew 收集器4. Paraller Scavenge 收集器5. Serial Old收集器6. Parller Old收集器7. CMS 收集器8. Garbage First 收集器 本文参考:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版&#x…

JVM垃圾收集器

一.概述 GC需要完成的三件事:1.哪些内存需要回收? 2.什么时候回收? 3.如何回收 Java内存运行时区域的各个部分: a. 其中程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行…

垃圾收集算法与垃圾收集器

典型的垃圾收集算法 1.Mark-Sweep(标记-清除)算法 这是最基础的垃圾回收算法,之所以说它是最基础的是因为它最容易实现,思想也是最简单的。标记-清除算法分为两个阶段:标记阶段和清除阶段。标记阶段的任务是标记出所有…

Java 的七种垃圾收集器

用 C 或 C 这样的编程语言写一个应用时,需要编写代码来销毁内存中不再需要的对象。当应用程序扩展得越来越复杂时,未使用对象被忽略释放的可能性就越大。这会导致内存泄露,最终内存耗尽,在某个时刻将没有更多的内存可以分配。结果…

Java 垃圾收集器

堆内存示意图 垃圾收集算法 1.标记-清除算法 算法分为标记和清除两个阶段。标记出所有需要回收的对象,在标记完成后,统一回收。 缺点: 执行效率不稳定,若堆中有大量对象要被回收,这是必须进行大量标记和清除动作&a…

JVM 垃圾收集器

title: “JVM 垃圾收集器” date: 2022-03-11T16:45:2108:00 draft: false 文章目录 引言术语垃圾收集器介绍Serial 收集器(新生代)ParNew收集器(新生代)Parallel Scavenge收集器(新生代)Serial Old 收集器…

详解ZGC垃圾收集器

从G1垃圾收集器开始,后面的垃圾收集器都不再将堆按照新生代和老年代作为整体进行回收,都采用了局部收集的设计思想。 可能是由于G1作为第一代局部收集的垃圾收集器,所以它继续保留了新生代和老年代的概念,笔者认为从局部收集和分…