卡卷网
当前位置:卡卷网 / 每日看点 / 正文

为什么「虚幻 5」的功能这么强大,Unity 没有被挤死?

作者:卡卷网发布时间:2024-12-12 00:22浏览数量:138次评论数量:0次

玩了一段时间虚幻,主要以下几点:

1.虚幻的教程跟 unity 差距很大,unity 的教程可以从最简单的向量讲起,怎么从数学公式推导到帧伪代码,最后到 unity 具体的工具链。

虚幻的教程可以不理解原理,依靠工具链就可以做出 demo,各种不理解都依靠虚幻比 unity 强大的多的工具链。 在工具链提供的功能范围内,你很爽,一旦你的想法超出了工具链的固有功能,那必须深挖虚幻引擎本身改源代码,这涉及到代码,数学的综合性应用,而这些不管付费免费的教程都是没教的

有人会说 unity 就没深挖源代码的时候?有,但是因为没有过于强大的工具链,小功能也得写代码自己实现,真到了改引擎的时候,前面的洗礼,能让你达到垫垫脚能够得着的程度了

2.对于独立游戏开发者来说,unity 的坑比较容易踩,每踩一个坑,只要这个坑涉及数学,动画设计技巧,多线程,有限状态机,等脱离游戏引擎的抽象概念时,等走完抽象到 unity 具体的过程,那么游戏设计能力也上了一个台阶,这些能力在游戏设计的大范围内都是可以迁移的

有些人会说,学虚幻也可以从踩坑学习啊?其实不是,虚幻的动画蓝图,metahuman ,内置 shader 等过于强大,在框架内还行,学习可迁移能力的机会都在各种拖放中失去了

举个例子,虚幻的内置 shader 很强大,场景出来啥都不用干,光影效果直接拉满,unity 一年不一定有这效果

如果满足于写实那没关系,怕就怕有一天要一个二之国的卡通画风,内置调不出来,然后去商店找,商店又找不到咋办?从兰博特反射重新学?

或者说我想做一个格斗游戏,用虚幻 5 最新的 lyra 模型,那么涉及到角色动画和动画蓝图的传值问题,传的还是自定义的变量

为啥要传自定义变量,比如说,我想重现一下合金弹头吃的多了超胖,子弹也变胖的效果,既然角色蓝图绑定了碰撞器,那么碰撞器碰到食物,角色蓝图里的某个变量会递增,递增到一个程度让一个布尔变量为真,传到动画蓝图,动画蓝图播放变胖动画,绝对正常思路!ue4 的解决思路是在动画蓝图直接获取角色蓝图实例,既然实例都获取了,实例的变量还用说,但是在 ue5 最新推出的 lyra 行不通,你要这么搞立刻弹出警告说线程不安全!

不好意思,这是我本人踩过的坑,翻遍 b 站找不到答案,得到的答案是用 c++,拜托!你蓝图发展这么多年,新出的角色蓝图要我去用 c++?这件事后,彻底明白了 ue 的水有多深,从此又回到 unity 路线中,ue 还是等各路大神多出点教程再说,实在没有时间蹉跎

3.书籍方面 unity 明显占优,有的人对看书嗤之以鼻,有视频看,为啥要看书,书对比视频有一个明显优势,看书,阅读者可以有自己的节奏,尤其适合阅读代码,一行代码看不懂,可以停下来,慢慢思考,可以方便的回溯,比如 unity 人工智能游戏开发这本书,会从讲例子开始娓娓道来,认真看基本能懂, 视频可没这么容易,拖进度条真的很烦人,大多野生教程根本不懂 啥叫剪辑,各种鼠标滚轮大段的翻动代码,甚至把代码调试的冗长过程也做进视频里。真的让人难受

而虚幻的书跟 unity 根本不是一个量级,就今年来说,市面上的书大多都是虚幻 4 的,官方教程 各种蜻蜓点水,根本不深入,去 b 站看免费教程全是蓝图的,蓝图不管是视频教程还是书籍看着真累!

4 蓝图和代码,所谓蓝图就是图形化编程,这个并不是一个新的概念,起码二十年的历史,但是蓝图有个特点,简单的逻辑一连一大片,比如一个向量的 xy 分量变两倍,再整个模长缩短为 0.5,在绕着欧拉角 绕着 z 轴旋转 30 度。如果在 unity 解决,前置知识是欧拉角,四元数,点乘,具体推导可以用 api,你能写出这最多 5 行代码,线性代数专家自然谈不上,起码可以用 api 做出来了。

有一个例子,最近吸血鬼幸存者很火,那么我想给游戏增加难度,运用一下进化算法,别听名字唬人,其实换一个说法就是动态难度,比如玩家拿的都是防身类武器,大蒜,圣经之类的,那么就创建远程怪多一点,可以再远处发射慢速子弹,你的防身类武器只能靠近才能击杀怪物,如果玩家拿的是飞刀,魔法杖等远程武器,那么就创建近身肉搏快速移动怪,投射类武器有发射角度的,如果怪物在死角快速接近很难缠的!我不知道蓝图怎么连的,反正任何一本人工智能的书都是伪代码,c++.python 三选一,再有就是干脆就是图示。就是没有蓝图那样的图形化编程, 把伪代码转化成 csharp 代码总归比蓝图容易吧!

人工智能在游戏里的应用多了,由于游戏引擎众多,不可能专门有很多针对 unity,虚幻的书,即使有也不可能只看那么几本,得学会迁移!而代码阅读是迁移最方便的方式

要是用虚幻,嘿嘿!一连一大片,b 站的教程一会放大一会缩小,放大了看具体函数看不清了,缩小了又不能看到全局,再用动画蓝图给你包一层窗户纸,那就更糊涂了,我想做一个马里奥雪地里奔跑,然后吃了翅膀飞天的效果,动画蓝图可以轻松的获得角速度,加速度,速度,但是怎么直接操控这些变量呢?接下来是一系列的巨坑,或者灵魂拷问,灵魂拷问有这些

4.1 官方甚至没有一句,不建议在动画看图写游戏逻辑的话,那咋办

4.2 这个方向要不要深挖?如果我深挖了发现此路不通不是很亏?

4.3 即使能写逻辑,用蓝图还是 cpp

4.4 蓝图到底能支撑多大的复杂度?复杂度到达多少就不得不用 c++了?

4.5 怎么在动画蓝图获取键盘输入呢?

4.6 如果真到了用 c++的程度,c++学到什么程度,哪些 c++的特性是虚幻不需要的?

不得不说虚幻很有特点,刚开始入门真的简单,但是没走几步,就是巨大的复杂度

而这些,官方如果不出一本代码大全类似的大部头,不知道要蹉跎多少人的时间和青春,而这些不好意思,没人教,自己悟,跟学中医一样

如果做过后端的同学超过十年,应该知道以前有一款后端框架叫做 asp.net,出道时号称拖放控件就能做网站,靠着控件拖拖拖,不用管后端前端一概不管,只用拖放一个控件,然后双击控件点进去,再指定的代码块中写逻辑就行,但是!真的商业化项目谁拖控件?招人也一样,招 java 一大把,招 .net 几个星期没几个人

这也是虚幻面对的问题,metahuman 点点,蓝图连连连,真简单啊,但是一点小问题就被逼得重头学起,还不如 unity 磕磕碰碰,一路走来也算技术积累。招人 unity 一大把,虚幻几个星期没几个,小公司招虚幻高手还都是 腾讯剩下的,小公司真的玩得过腾讯这些巨头吗,独立游戏开发者真的从近乎垂直的学习曲线中存活吗?不好意思,万中无一!

5.游戏引擎的学习,是不是学到了真东西,归根底三个字,可迁移,举个例子。学会了啥是位移的线性插值,那么不管是 unity,godot.bevy rpgmake 等成熟引擎,或者是 html5.python,等成熟语言的娱乐分支都可以手到擒来,单论线性插值可学的东西多了,位移的线性插值简单,那么带加速度的位移呢,旋转的线性插值呢,旋转有加速度呢,如果旋转的目标需要获取怎么半?这些林林总总的问题全都是要直面 api 才能实践和了解的,真懂了,再去虚幻蓝图连连看,就会发现真简单啊!

游戏从业者真的要从基本的游戏抽象概念,数学开始学起,而这些明显 unity 更适配,等学成了再去挑战下 虚幻!

6.虚幻公司对于图形化编程执念过深,还是得走代码,我个人感觉蓝图加快的效率和减少的效率是一样的,我想如果蓝图能实现所有逻辑,何苦还要开放 c++,像 rpgmake 一样,直接上界面彻底隔绝代码不是更加高级,可惜没有,可见必然有一部分逻辑是需要 cpp 的,至少功能实现和运行效率有一个不能满足。游戏作为一个创意行业,至少不能让工具束缚自己思维吧!也不能说我故意让游戏变得卡卡的吧

7.虚幻的编译慢到令人发指,但是蓝图的编译非常快,虚幻是铁了心力挺蓝图,cpp 这块与其说是不能优化,不如说是根本没有投入,目前就我个人用过来,界面,输入,一些事务性的功能直接放弃 cpp 走蓝图,cpp 写的代码要是一些受代码之外知识指导的代码,例如,力学,概率论,线性代数微积分,数值计算这是比较合适的,用 cpp 写一些分数界面摆到右上角,更换武器之类的功能实在受罪,尤其对于个人独立开发者来说

8.对于独立开发者,如果要做的游戏动作成份很高,建议虚幻,虚幻的动作系统,真的强大,如果动作成分很低,甚至直接播放固定动画也行,那么就unity,涉及逻辑甚至概率论,博弈的东西还是写代码比较好,虚幻的编译实在难以忍受

这篇答案看起来是 unity 的软文,其实我还是对 ue 很向往的,但是就像武当长拳还没精通,实在无力驾驭逍遥游这种高阶功法,那么面对的道路无非两条,加入武当七劫阵,就像学 ue 就加入大公司团队作战,边做边学,要么继续武当长拳,待内功高了,再去挑战逍遥游。

如果都不懂,初学者,还是独立游戏开发,还是别去碰 ue,这跟少林长拳没练好,直接上龙象般诺功真行不通,当然你要做黑棉花悟能,不靠质量靠流量,当然也是可以,做游戏能赚钱谁能说学的不成功?

最后,两个引擎都各有各的方便,各有各非常讨厌的点,如果不是专职独立游戏开发,那就抓阄吧,反正都会后悔(狗头)一旦选定一个引擎就别动了,从这个答案发布两年,两个引擎都有很多教程问世,有些是讲的真好,只要持之以恒,一定能做出心仪的游戏

2024年7月24日更新

由于unity吃相太难看,又由于独立游戏本身成功率很低,其实选任何引擎都差不多,本人鉴于unity吃相过于难看,工具链太过简陋,所以专心于虚幻了

本来前面提到的角色蓝图传递数据给动画蓝图问题,可以用蓝图接口解决,

1.首先让角色蓝图和动画蓝图绑定

2.接着给动画蓝图绑定一个蓝图接口,在接口定义以参数形式定义入参和出参

3.由于角色蓝图和动画蓝图绑定,动画蓝图又和蓝图接口绑定,所以角色蓝图可以用调用接口的形式传参数

4.在动画蓝图中接参数用property access函数,或者以事件形式接也行

2024年9月3日更新

跟游科过去四年面对的困难相比,选择虚幻的一切困难都不值一提,更加坚定了我选择虚幻的决心,跟大圣面临的困难相比,虚幻的困难连百分之一的猴毛都算不上

END

免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。

卡卷网

卡卷网 主页 联系他吧

请记住:卡卷网 Www.Kajuan.Net

欢迎 发表评论:

请填写验证码