(原)利用Unreal实现动作类-打击感部分2


@author : 黑袍小道

查看随缘,转载标黑袍。

 

(

分享原因:

1、都8102 世界体了,不是核心底层技术不用藏着(太多可购买可参考了那啥了),这种是游戏人都知道,而且都是基础。总结而已罢了。

2、实例永远只是实例,也只能只是。关键是反推到底层,和做法(这个才能产生变化,引擎和语言,可以做到NX,也可以做到SX 嘿嘿。

 

前言

在利用Unreal实现XXXX,其实实现方式和对应的设计(都有很多种,关键看缘分?开玩笑,这很多要看个人理解。在这部分只说原理和对应实现,尽量保证逻辑单一,可以配置,编辑器可以跳转到其他部分后面会补上对应的编辑器制作。)

(这个差了一下同步)

(有代表性的拳皇,格斗是一种,什么DNF,鬼泣,猎天使,属于一种,骑马已砍杀是一种,黑魂、战神这些又是一种。奇迹,还有俯视角的许多就有很多了。其实都存在不同和相同的方式,当然杨冰【独立制作人】【但作为单独程序的责任需要把逻辑划分清楚,保证扩展】的那个是最值得学习, https://blog.csdn.net/u012999985/article/details/71056425。)

正文:

      (若关心元素实现,可以直接跳到实现部分)

 

额外说明

 

        因为游戏关于这个,一来都是大佬意见和看法,小道只能总结和实现(游戏都没玩过上百通关的,不敢发表看法)

独立游戏开发界: <https://www.bilibili.com/video/av5199528/> ,结论:反馈。

元素

  (查看作者知乎:Meta42 来自 <https://www.zhihu.com/question/20344728> )

  我们只要把下面所有要素都处理好了,游戏的战斗就有打击感了么?此颜差矣。《孙子兵法》曾经曰过“备前则后寡,备后则前寡;备左则右寡,备右则左寡;无所不备,则无所不寡”,(扯淡的嘿嘿)

  • 攻击动作与受击动作
  • 特效
  • 伤害数字
  • 连击与连击计数
  • 顿帧
  • 慢动作(应该叫局部慢时间。可以到铁拳,火影这些)
  • 镜头震动
  • 镜头模糊
  • 视角切换
  • 音效

  (以下小道乱说)

  关键是需要的重点,打击感对于游戏,就像金钱对于生活,只是手段,而不是目的

  有满屏伤害数字的(打打咚哒哒哒咚咚咚咚【爆】,嘿嘿)加上连击,顿帧,切特殊镜头的【崩,火】

  有一丢都没数值的,用镜头收缩、特效、顿或延时帧来的(啪啪噗---(满)---爆-顿-爆)【鬼,猎】

  有物理动作,加上动作缓慢的和硬直切换的。(啪嗒-哦-啪啪啪,哈哈)【骑马】

  (关于网络同步走的,其实也不能一概否,黑色沙漠,还有逆水寒(技术真的好,别骂小道)这些也有看到的)

 

  综上就出现:、天朝、欧美,日韩几种方式,再加上理论和实践,结果就是一句缘分。【意会意会】

 

实现元素前的说明

 

(原文: <http://gad.qq.com/article/detail/26109>,作者:波杰克Po,转载自奶牛关游戏社区)

 

首先是基础点(抛开这些东西后,打击感就消失了):

  •  

操作的映射(准确性和符合预期性)

(电脑里的人物是玩家的肢体延伸,玩家的操作要即时有效),就好像你开车,像左打了方向,车就即时的向左拐。方向打多少就拐多大的角度。准确和符合预期才能正常的操作。如果往左打了一点点,汽车直接原地转了3圈,或者随机拐一个角度,你就完全不可控了。

前摇动作

(攻击蓄力),没有这部分,动作会显得软绵无力。

攻击动作命中目标

(无论是动作还是特效,都得让玩家意识到打中了目标),没有这部分会显得不真实。

受击动作表现

(只要受击瞬间的动作合理,打击感就能出来),没有这部分同样会显得不真实。

攻击受击同步

(主要是命中点和受击点的同步),没有这部分会显得不真实。

【以上4点如果没做到,最大的影响是不真实,就像一个瘦弱的人轻轻的摸了一下汽车,汽车等了2秒后被击飞了老远的那种感觉。因此要实现打击感的第一点,是要成功的骗过玩家的大脑,让他感受到真实感。像一个魔术师一般,上面的四点是绝不能让玩家看出破绽的。】

其次是进阶点(加进来可以让打击感更好):

 

  •  

命中标识的明显化

(受击动作是一个基础的命中标识,但识别度还不够高。)因此还需要夸张的受击特效、身体的反白效果、受击的伤害数字的冒出效果、受击后抖动的效果、被击退、被击飞、被击倒

环境效果

(强调一个攻击力度的强弱,除了受击方的表现,另外就是对周遭环境的影响),简单有效的包含:震屏(震动频率与动作匹配)、尘土特效(高速移动一定会带来尘土飞扬的效果)

击杀表现

(杀死目标代表了玩家完成了某个战斗事件,这时候应该给予玩家奖励信息),因此怪物的死亡特效死亡动作要表现的足够华丽。一定要大,要有爆点。

攻击特效

(理论上可有可无,但有可以放大效果的表现)可以运用空间扭曲、身体模糊等效果来提升特效的档次。切忌不要喧宾夺主,主体是动作和受击特效,攻击特效一定要让步。

音效

(实际音效的只能放大已有的打击感,如果本身没有打击感,音效并无大作用)就算完全没音效,依旧可以表现出良好的打击感。特别注意的是,有的情况下一定要和动作切合,和武器材质贴合。

 

第三是高阶点(真正动作游戏向的内容,顿帧、硬直、打断、动作的多样性、镜头、全屏动画表现)

  •  

顿帧

攻击方命中目标后,攻击方动作、特效,受击方动作、特效,短暂暂停的表现效果。真正动作向的游戏不可跳过的一部分。注意受击方的顿帧表现并非必须的,而是因为顿帧时无法进行其它操作,因此受击顿帧可以用来延长受击硬直的时间。

硬直

分为攻击硬直和受击硬直。攻击硬直里又分为前摇和后摇。硬直时间是指进入某一状态后,玩家不可操作打断的时间。(如一个攻击动作共4秒,前摇2秒后摇2秒,命中是瞬间的事情。后摇1秒后允许移动OR技能打断。这时候攻击硬直时间为3秒,若玩家主动移动OR技能打断,则时间短;若玩家不操作,任由技能表现放完,则需要4秒。)

打断

在目标攻击前摇结束前,即伤害产生前攻击目标,使目标进入受击状态。(同样是上面的例子,假设A攻击前摇2秒,B攻击前摇1秒,B看到A施放攻击,并按下技能攻击B,这时候的时间若在1秒前,则B命中A,打断成功,A进入受击。若在1秒后,则A命中B,打断失败,B进入受击。)

动作多样性

这部分决定了战斗的华丽性。单一的武器单一的攻击方式,会让战斗变得单调。动作多样性足够多,就可以打出各种各样的连招组合。(也是为什么格斗游戏单一键位对应单一动作,组合键位对应复杂动作,更多的组合键对应各种大招。如果每个按键对应一个大招就没什么多样性可言了。)

镜头

根据技能,主要是大招的施放节奏,镜头的转化和缩放能更好的突显出大招的威力。聚集能量的时候缩,施放伤害的时候放。(小道解释这就是为啥,技能要有个技能Sys对吧)

全屏动画表现

类似火影究极风暴。施放忍术大招的时候,会用一个全屏动画来代替(动画本身设计的决定了好坏)攻击前摇的部分,动画结束时播放命中目标的特效。想到与一个超级蓄力动作,蓄力那么久,威力必然大。

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

不知理则久崩,我们不能一直都是对着源码CC+CV,对着复制到用时时间翻倍或没头绪(这取舍,得心里明白)。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

实现:

(因为是篇是打击,所以只说打击相关。连招缓存,和连招的程序切换【其实就是个动态修改了Next索引罢了】等都不在这里说明)

 

基于Unreal,Unity,Cocos 【这里就Unreal,蓝图方便说明而已】【稍后找找之前的 给上来,完全个人不怕那啥,嘿嘿】

(原因:

 

 

 

第一步:

目的:要到数据

1、AnimationNotify(动画通知):当动画局部时间经过通知的时刻,或进入通知的时间区域时候触发通知。

(通知逻辑,其实大部分是可以转到C++,为何要转,具体看优化部分说明)

(这里插入一点注意:如果进入通知时刻全局timescale=0或者动画的timescale=0,然后再开启,会如何?答案:会触发两次,为何?你懂的)

(关于通知的使用其实大可以发掘和扩展:但注意一点,逻辑耦合)

(这里有一个分享也可以看看:作者张瀚荣来自 <https://blog.csdn.net/OnafioO/article/details/78051971> ,当然是否盒子类碰撞检测和射线看具体)

 

2、HitCheck(伤害区域判定)

 

 

这里解决伤害区域判定:

攻击方:

2.1、利用挂在人物上的Box,加上通知区域(实现Transform相对数据变化)

2.2、碰撞发生时是攻击方否为有效时间段:

 

 

(都只是标志缓存,可以放到角色上,也可以放到动画蓝图上。但肯定有个统一的接口:因为实现会变化,和加入外部条件)

受击方:

2.3、最基础的做一个打开伤害,为何?(真实或者夸张下,伤害没有瞬间多次,当然这里也可以不用通知直接处理。

 

 

上述最后,我们可以做到数据变化上,然后根据需要做外部接口(这样还有机会继续优化和扩展).懒,就直接访问

 

第二步:

目的:得到数据,做对应的处理而已(这里可以做到对象上,也可以是对象的某一组件上

【分出到自定义的上做也可以,觉得放到自定义上,然后在组合的OB上,做个表对象映射是挺好的选择。便于扩展和配置】

 

 

 

第三步:

就是元素的单个实现:

A

攻击受击同步


 这里就是检测而已,取到对应点或者面。命中

B

命中标识的明显化

 

1、特效:在对应位置和面上播放

 

2、反白:人物Hit组件(自定义一个,或者就Role做),但注意下因为反白会多次,会消失,

所以最好单独就是个效果Obj,这样处理消失和效果时间叠加减少,和判断其他都容易和清除,也不影响其他)。

大部分是人物Mesh,做动态材质属性变化( createDynamicMateria,使用前判断有无,没有创建,有则修改)

进入(入和出成对)

 

恢复

 

 

 

 

3、计算需要的数据,力,类型等效果值

 

 

 

 

4、进入到伤害动画

 

 

 

5、顿帧、硬值、打断

做之前吧顿帧时间,硬直时间,打断时间都计算好。根据配置做顿帧、硬值、打断开关处理

 

 

 

    

顿帧:

(攻击方命中目标后,攻击方动作、特效,受击方动作、特效,短暂暂停的表现效果)

 

 

 

 

 

硬直:

(硬直时间是指进入某一状态后,玩家不可操作打断的时间。)

 

 

 

力表现:(只是测试,就直接Tween. 若是开物理可以物理, (懒就TW和给力),最恰当得自己封装一个Item模拟)

 

 

 

镜头:

UE有几种做动画的方式。

1

CameraShake对象,其中包含了Anim:

1、用RotOscillation,LocOscillation,FOVscillation实现

2、用Anim实现

 

 

3、打开CameraShake,蓝图做

EventReceivePlayShake D Scale0 〈>EventReceiveStopShake D Immediately" v:shapes="图片_x0020_20">

 

 

 

 

(以上都可转C++,这里懒就表下)

 

全局时间和局部时间

 

 

 

以上为大体的使用实现,这里只是击中后时刻做的实现。动画多样性,前后摇动作(后面补上挺杂的,得找找嘿嘿)

 

 

备注

CSDN:https://blog.csdn.net/u012999985/article/details/71056425

知乎:  https://www.zhihu.com/question/20344728

GAD:http://gad.qq.com/article/detail/26109、 <https://blog.csdn.net/OnafioO/article/details/78051971>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM