魔兽地图编辑器吧 关注:65,267贴子:3,840,115

[探讨与交流]类WOW界面/操作逻辑的第三人称MORPG系统

只看楼主收藏回复

大概是7-8年前,我曾经有很长时间,包括整个暑假都泡在WE上,日夜钻研它。时隔这么久,最近发现重制版要出了,就重新把魔兽下了回来重温了一下,顺便还玩了玩网易给的魔改WE。
然后摸索的时候发现,现在已经可以做自定义UI了,于是就打算实现一下魔兽世界的界面UI/操作逻辑/运动系统。弄了弄发现也不是太难,于是今天就做出了一个demo(就是下图了)。


IP属地:中国香港来自Android客户端1楼2019-05-11 10:05回复
    半成品demo会包括一下几点。
    首先是UI界面:
    1.角色状态栏(等级,名字,头像,血量,蓝量,经验条)
    2.目标状态栏(选定或被施法目标的血量和蓝量)
    3.Buff栏
    4.技能栏
    5.一些别的按钮(包括菜单、背包按钮)


    IP属地:中国香港来自Android客户端2楼2019-05-11 10:09
    回复
      2025-06-25 07:18:56
      广告
      其次是操作逻辑
      W前进
      A镜头和角色向左转向
      S后退
      D镜头和角色向右转向


      IP属地:中国香港来自Android客户端3楼2019-05-11 10:11
      回复
        还有就是鼠标/键盘事件的处理
        1.滚轮可以调整镜头视距
        2.左键拖拽可以自由调整镜头视角
        3.右键拖拽可以自由调整镜头视角,同时角色也同步转向
        4.空格跳跃


        IP属地:中国香港来自Android客户端4楼2019-05-11 10:13
        回复
          所以想问问这些都已经有人实现出来了吗,想和前辈或者朋友们交流讨论一下


          IP属地:中国香港来自Android客户端5楼2019-05-11 10:26
          回复
            网易有张图,刀剑神域竞技场


            来自Android客户端6楼2019-05-11 10:34
            收起回复
              别想太多,我做过,没用


              IP属地:河南来自iPhone客户端7楼2019-05-11 11:03
              收起回复
                别做了,就魔兽这引擎,百搭


                来自Android客户端8楼2019-05-11 14:55
                回复
                  2025-06-25 07:12:56
                  广告
                  试试war31.31PTR,据说解决了按键数据异步(BlZ并入了ydapi和dzapi)?


                  IP属地:广东9楼2019-05-11 15:13
                  回复
                    去年做过一个按键移动和3D镜头的DEMO,可以跟你聊一下过程中大概会遇到的问题。
                    - 首先是按键移动,按键移动最大的问题在于碰撞检测,我在研究这个问题的时候也算是见过各种各样的解决方案了。
                    最简单的方法是用IssuePointOrder来移动单位,这样就能按魔兽原本的做法自动检测碰撞,但是这个方法用在按键移动上手感很差,不推荐。
                    第二个方法,这贴吧网盘有个演示图,检测碰撞的做法是在移动路径上建造(注意是建造)隐形单位,用IssueBuildOrder的返回值判断路径是否可通行,从效果上来看还是挺不错的,缺点是你需要把游戏界面里建造相关的小地图提示和苦工提示音禁用掉,另外你可能还需要自己写单位碰撞到边缘时的斜向行走规则(旋转镜头为主的3D移动系统应该不需要)。
                    最后,还有个更方便的方法,只需要用到SetUnitPosition(如果换成SetUnitX、SetUnitY的话就会无视一切障碍移动,甚至可以跑出地图边界),但是SetUnitPosition并不能算是检测碰撞,实际效果是当你把单位移动到与碰撞地形或物体重叠的时候,就会被挤出去。虽然看上去似乎挺遗憾,但国外早在10年前就有人把这问题解决了:HIVE上有个演示图,名字是“Advanced Camera, Keyboard & Movement System”,这图的做法就是用SetUnitPosition移动单位,同时记录下单位移动前的坐标,然后用这个坐标和移动后的坐标进行对比,如果两个坐标差距过大就相当于被挤出去了(也就是发生了碰撞),这种情况只需要把单位位置恢复到移动前的坐标就可以了(你并不会看到单位被挤出去的过程);另外这个方法还顺便实现了微调整,单位在边缘斜向移动也能完美处理。总之这方法几乎是目前魔兽按键移动碰撞检测最优解了,既简单又好用(十几行代码就能搞定),我现在就在用它。
                    - 接下来是镜头,做镜头的过程中会遇到很多坑,由于这贴吧几乎找不到研究镜头的帖子,所以大部分问题都要自己想办法。
                    我在写镜头系统的时候遇到了各种各样的大小问题, 其中绝大多数是由于魔兽的默认镜头处理手段以及快捷键产生的,所以首先需要把全部镜头设置扔到一个循环的计时器里(试着做过的都知道),然后就可以为每个镜头属性创建一个独立变量,在按键事件里通过设置这些变量来操控镜头了。
                    不过在这之前,如果想要做多人游戏的话,首先还是要考虑同步问题(我在实现了大部分功能后才意识到这件事,然后重写结构,浪费了不少时间)。原则上来说,你并不需要为每个玩家单独设立一套镜头结构,因为镜头相关函数本身就是不同步的,而且并不会引起掉线,所以基本不需要把变量数组化甚至是写一个struct。但是,3D镜头系统与按键移动系统是有耦合关系的,镜头的方向属性与单位移动方向息息相关,涉及到单位移动,就需要进行同步处理了。对于这个问题,你可以把镜头方向的变量数组化,然后用另外的计时器来单独控制;或者可以用同步函数把这个数据同步到按键系统内,具体怎么做还是要看你的结构写成什么样了。
                    镜头还有两大问题需要处理:
                    1.魔兽本身的自动镜头高度调整。在游戏中,魔兽会自动检测本地玩家镜头目标点一定半径范围内的地形平均高度,然后进行镜头高度调整。举个例子,你控制一个单位移动到山脚下,即使单位的高度没发生变化,但由于你的镜头目标点半径内包含了山的高度,所以镜头还是会被抬高。
                    2.旋转镜头会穿墙遁地,让玩家看到不该看的东西。
                    上面两个问题之前有人在贴吧发过提问帖,我各自给出了一种思路和解决方案,有兴趣的话可以搜一下用来参考。
                    最后关于镜头,魔兽还有一个天然限制:远景剪裁上限10000。如果要做宏大的3D场景的话,远景可能会让人看得不太舒服。在官方扩展这个限制之前,四面环山的小场景效果应该会更好吧。
                    以上这些就是我在做3D系统的时候遇到的大问题,还有许多零碎的小问题,由于比较容易解决,就不再阐述了。顺便说一说,我之前一直在尝试做个3D场景的RPG,但发现工作量太大,时间上一个人很难搞定,无奈只能先换成更简单的游戏类型,有积累了之后再做尝试。
                    总之希望这些经验对你有帮助。


                    IP属地:河北10楼2019-05-11 16:45
                    收起回复
                      回复楼上。
                      1.首先,我的移动是用循环计时器来做的,每次循环就执行(瞬间移动角色到当前角色的坐标的位移点,位移x轴为cos角度*速度,位移y轴为sin角度*速度【别的按键会不一样】)。事件的触发逻辑则为,按按钮时播放角色的行走动画并打开计时器,释放按钮时关闭行走动画并关闭计时器。这样子一按W就前进,一释放就停下了。另外使用这个方法是仍然有碰撞体积的,不需要再做的别的改动。
                      2.镜头的锁定、调整也都是靠的计时器+鼠标xy坐标变化+坐标计算,这点向量和三角函数的计算还是难不到我的。现在体验和魔兽世界没有区别
                      3.自动镜头高度调整,我的镜头高度用变量存储了起来,一旦有变化镜头就会自动平滑归原。
                      4.穿墙遁地我也解决了,镜头的x轴也就是直视视角只要是0-180之间就会在地底,只要是180-360度就会在地面了
                      5.远景裁剪上限,这个问题我发现了,而且我目前没有办法。噢,不对还是有个办法的。就是把所有模型都缩小,这样子空间就自动变大了😂
                      6.除此之外,我还做了重力系统来模拟按下空格之后的跳跃动作,目前还在测试和优化


                      IP属地:中国香港来自Android客户端11楼2019-05-12 01:14
                      收起回复
                        LZ网易的魔改we在哪下啊


                        IP属地:湖北12楼2020-06-12 12:37
                        回复
                          赞一个


                          IP属地:上海来自Android客户端13楼2020-06-12 16:50
                          回复
                            然而并没有什么卵用


                            IP属地:上海来自Android客户端14楼2020-06-12 16:59
                            回复
                              2025-06-25 07:06:56
                              广告
                              能发个演示图吗我想弄3d镜头但是教程太少了弄不明白


                              IP属地:广东来自Android客户端15楼2021-03-31 08:35
                              回复