独立游戏吧 关注:58,416贴子:340,578

又开始做游戏了,这次用UE

取消只看楼主收藏回复

之前尝试过几次,用过Godot,用过纯Java,也用过Unity,都因为各种原因(半途而废)没有弄完,这次试试UE
先谈谈这几款引擎的使用体验。楼主是程序员出身,用以上几款引擎总感觉在程序上拉不开优势,美术上又赶不上别人,做来做去就是一个小人跑来跑去,这碰撞一下,那触发一下,本质上和使用RM没啥区别(我水平菜)
自从用了UE,那感觉真是程序员扬眉吐气,C艹你不会就是不会,不像C艹艹英语好点,网上复制一段改改也能跑。C艹报错有时候那真是天王老子来了也看不懂,每次解决问题都让程序员的虚荣心得到了极大的满足。
最重要的是,UE太方便了,提供的工具(比如GAS、内置网络同步)太强了,学会之后原地飞升,直接结成金丹。
言归正传,这次还是准备做个简单的挂机游戏(对标奇迹MU),可联机但不是网游,目前在做背包,背包系统是魔兽世界那种格子的,本来想做奇迹MU那种在背包里显示Mesh的,但是UE搞起来比较麻烦,要把Mesh偷偷放到地图某处,然后渲染到一个材质上再显示出来,想了想怂了,还是先搞个简单的。
目前状态:
1. 代码共905行(有极大水分,搭架子很多模板代码)
2. 设计了物品表、背包存储相关的数据结构
3. 简单的背包UI(动态配置背包格子,可以装备多个背包)
4. 捡东西(网络同步)
服务端和客户端背包

物品表

Git提交记录

简单记录一下,万一成了呢


IP属地:浙江1楼2024-07-06 16:35回复
    更新
    1. 拾取方式改为按空格拾取附近所有物品(鼠标拾取还没做)
    2. 拖拽交换(网络同步)
    3. 拖拽丢弃(网络同步)
    遇到不少坑,比如拖拽的时候没法获取鼠标下的物体,试了各种方法都不行,后面想到使用延迟应该可以(先结束Drag事件),但是还得手动处理失败的情况(比如丢到地图外),就改为更方便的随机刷新在角色周围。
    还有同步的设置,我的掉落物是根据ID在配置表里找Mesh动态设置的(也就是只有一个BP_PickableItem,设置不同的ID就显示不同的样子),一开始忘记同步这个ID了,导致客户端显示不出Mesh,找到问题后很快就解决了
    网络同步确实考虑的要比单机多一些,比如怎么把同步的数据最小化(我的交换物品和丢弃物品只用RPC传了格子的ID和背包ID,所有的交换和掉落在服务端完成,然后PRC调用客户端,传格子和背包ID,以及物品ID,再由客户端操作显示相关,目前来看效果还行),目测多了30%工作量。
    虽然是个局域网游戏,但总是不自觉的考虑复制等安全问题,进一步加大工作量,其实应该不处理也行
    动图:


    IP属地:浙江11楼2024-07-07 17:55
    回复
      2026-06-06 19:56:37
      广告
      不感兴趣
      开通SVIP免广告
      更新一下
      1. 物体描边
      2. 鼠标捡物

      接下来的计划是整整UI,然后把人物装备栏做出来,再进行联动(仅UI和GAS属性,人物先不换装)


      IP属地:浙江12楼2024-07-08 11:45
      收起回复
        上次计划说开始弄UI了,但是发完发现忘记弄堆叠了,然后又觉得拖拽操作不太方便,更习惯鼠标点一下,到目的地再点一下。于是把拖拽逻辑全部重写了,改成了点击操作。
        本来以为会很简单(不就是前端换个操作方式吗?),没想到,由于拖拽是系统自带的,各种回调很方便,自己写操作,要考虑很多意外,搞了好久。
        本次更新(全部支持联机):
        1. 改了背包交互逻辑
        2. 物品堆叠、合并、交换
        3. 物品分离(本来想做MC的逻辑,但是右键还有其他用处,改为了按住Shfit键,分出一半到最近的一个空格)
        4. 丢弃物品(可以丢弃一堆,捡起来还是相同数量的一堆)
        5. 捡东西如果满了,会重新掉出去
        以上几点都测过极限情况,比如鼠标上拿着东西捡东西、一次捡很多东西、一个人丢一个人捡等,功能均正常,没有出现多或者少物品的情况。
        下面真的可以搞UI了吧
        图:左键操作逻辑,尝试提取公共操作,但是没这方面经验,脑子转不过弯,最后只能if else解决

        动图(简单综合演示)


        IP属地:浙江14楼2024-07-10 13:55
        回复
          说个题外话,输入系统是在GAS里学的,个人感觉挺牛逼的一个处理方式。
          原理是继承了EnhancedInputComponent,然后在SetupInputComponet的时候,调用下面这个Template,给每个按键的按下、按住、抬起绑上这么一个方法,再把自己的Tag(自定义的,和按键绑定)传进去。
          逻辑是在这些个绑定的方法里,根据Tag进行操作识别的。
          所以,理论上按键是可以随便更换的。比如我定义了1、2、3、4、5等技能快捷键,只要给技能标上这些按键的Tag,就可以实现按键绑定了。而1、2、3、4、5的按键绑定,EnhancedInput本来就可以实现。
          (没写过C++的Template,看到教程这么写,震了个大惊!感觉就是给程序赋予了“假设”的能力,还是编译时的,C++真的强)


          IP属地:浙江15楼2024-07-10 14:11
          回复
            更新:
            1. 物品属性配置(还要改)
            2. 显示信息(根据属性组装,处理了本地化)
            3. 掉到地上显示信息
            4. 提取公共类做了仓库(原来有设计基类,但是不够好,重构了下),数据源对了,交互还没做
            下一步计划:
            1. 仓库交互
            2. 给仓库穿戴背包(加格子)
            3. 角色装备栏
            图:简单演示


            IP属地:浙江17楼2024-07-13 15:49
            收起回复
              GPT是真的牛逼


              IP属地:浙江18楼2024-07-14 09:26
              收起回复
                更新:
                1. 重新设计了属性配置,简化后期填表工作量
                2. 重新设计了物品的实例数据结构,原来是按品质固定属性,比如传奇的XXX属性都一样,现在是按品质掉落固定属性+对应品质的随机属性(词条),如:传奇的XXX,固定属性会比普通的高,还会带有随机属性(随机的属性也分品质,每品质数值固定,比如杀怪回血,普通的词条回10,传奇的词条回20,词条品质和物品品质无关,物品品质只关乎于词条随机池)
                2. 仓库交互(存取、穿脱背包),部分校验偷懒走了本地,因为设计的本来就是个可联机的单机游戏,存档都在本地,很多地方如果走服务器校验会很麻烦
                提一嘴,严重低估了联机带来的工作量,之前预估的30%,目前看来,单从代码和测试方面,联网工作量增加80%不止。


                IP属地:浙江19楼2024-07-16 10:38
                回复
                  2026-06-06 19:50:37
                  广告
                  不感兴趣
                  开通SVIP免广告
                  再更一下,角色背包装备背包也搞定了。
                  总结一下背包和仓库的难点:
                  1. 由于不想同步容量和物品实例(否则Array变来变去很难预测),客户端和服务端通信采用的是格子的来源及坐标。加大了通信的难度(服务端默认不相信客户端的物品实例,其实没必要,只是练习下服务端校验)
                  2. UE的RPC方法只能是void(不确定,反正报错不给用,能用返回的话欢迎指正),导致有些逻辑只能依赖异步,加大了复杂度(比如客户端移动物品,点一下给一个跟随鼠标的图标,再点一下目标格子去服务端挪移,客户端在RPC发起时,就已经使用本地数据预测了结果,如果结果不对,得处理回滚)
                  3. 背包的数据结构没有设计好,一共六个背包格子,基本固定的,应该采用Capacity1~6六个属性,而我用了数组导致每动一个背包,一个数组的其他背包得跟着处理,即使它没动。不但容量是数组,实例也是数组,换背包得刷新整个面板,否则蓝图上得拖一大堆线去处理数组中的每个值。属实是过度设计了,结果不但没有太通用,反而更耦合了。思考了一下,正确做法可能应该分成6个独立的属性放在PlayerState上,背包通过配置绑定一个Tag,搞个被动Ability用SetByCaller设置value修改属性值,装上去触发增加的Effect,拿下去触发减少的Effect,UI上固定6个NamedSlot,有东西就展示,没东西就Hidden,然后在OnRep_中处理客户端,不敢想得有多简单,还能本地预测不依赖网络,也能很简单的刷新单个背包,哎,下一个会更好。
                  ----
                  其他就跟背包仓库没关系了,都是不熟练导致的。总之存储系统的工作量和联机的工作量双双超出预期,做了小半月才搞定,不过基础框架搭好了,后续做人物装备面板,只需要拿现成的组件拼拼凑凑就成了,包括后续想做的合成面板,都会受益。
                  ----
                  存储算是做完了,下一步是角色装备面板和属性
                  图:存储完工


                  IP属地:浙江21楼2024-07-16 17:28
                  收起回复
                    芜湖~GAS真是个好东西啊!!!所有属性都绑定了,测试写了最小和最大物理攻击,OJBK!~


                    IP属地:浙江23楼2024-07-18 18:31
                    收起回复
                      更新:
                      1. 属性之间的绑定(装备表,UI本地化显示、物品实例、GAS属性)
                      2. 属性之间的公式(只写了物理攻击的)
                      2. 穿脱装备 - 应用装备上的属性
                      1335行代码,只为穿上你
                      不过框架已搭好,剩下的就简单了,弄完这一大块,差不多就该考虑一下画面了
                      总代码量:3558行



                      IP属地:浙江24楼2024-07-19 12:30
                      回复
                        里程碑!
                        属性和存储这块算是基本完成了。
                        装备属性要求、人物加点、所有属性联动都已经实现,并且支持扩展,后续做装备强化、合成、装备掉落、加新的属性等等都会很简单。
                        作为一个程序员,可以负责任的说,打了一个非常牢固的基础,剩下的属性和存储相关的工作,就只是加东西,没有任何难度了。
                        搞了这么久,代码也写累了,下一步准备搞搞不熟悉的领域:
                        1. 首先用MetaHuman搞个角色,去掉脸部骨骼,优化到可接受的多边形数量。
                        2. 之前在Unity商店买过一些装备素材,低多边形的,用Blender修改一下,再用SP改成写实材质。
                        3. 绑定到MetaHuman上,分割成头、胸、腿、手、鞋,导入UE做换装。
                        以上没有一个是熟悉的领域,困难重重,但是也很开心终于到了这一步。
                        再之后就是战斗部分了,加油!
                        本次更新:
                        1. 装备需求显示和应用。
                        2. 加点。
                        3. 优化交换和合并物品,合并为一次PRC。



                        IP属地:浙江25楼2024-07-20 17:42
                        收起回复
                          总算是研究出一个工作量可以接受的模块化全流程。
                          MetaHuman太丑了,自己也雕不出什么好看的,干脆就用了低模。
                          低模+PBR材质,俯视角下,效果还可以接受。
                          每套装备共享一张2K材质。




                          IP属地:浙江26楼2024-07-22 10:32
                          收起回复
                            换装搞定啦!最不确定的地方,终于确定了!
                            装备是拿买的素材修改的,材质是用SP重做的,也算是跑了一遍全流程了。
                            更新:
                            1. 一个角色+一套装备
                            2. 同步换装备


                            IP属地:浙江27楼2024-07-22 17:17
                            回复
                              2026-06-06 19:44:37
                              广告
                              不感兴趣
                              开通SVIP免广告
                              还是决定走自己建模的工作流程。
                              这个角色还是太丑了,在sketchfab上下载了一个免费角色,重新绑了骨骼,然后参考奇迹MU的皮装备建了个模,效果比原来的好多了。
                              原来的Lowpoly模型,因为不需要烘焙(用的色卡+UV直接缩放很小移过去),上色的时候发现又很多不规整的面(重叠的,隐藏的,垃圾资源),用起来还没自己重新建一个快。
                              自己建模虽然工作量多点,但是意义重大,不再被美术资源卡脖子了!
                              图:下载的免费角色,胖次材质还没换,头发胡子还没贴上

                              图:自己建模的两件奇迹MU皮装以及上身效果



                              IP属地:浙江28楼2024-07-23 14:54
                              收起回复