半肾
精华
|
战斗力 鹅
|
回帖 0
注册时间 2018-1-4
|
本帖最后由 dumplingpro 于 2018-3-5 11:44 编辑
以前的一个脑洞,之前玩一个叫zomday的VR游戏,打僵尸游戏,可以加点,僵尸也有血量,算是ARPG?
手感优化好,各种爆头跳暴击红字、连爆出子弹时间贼爽,并且除了常规的**之外,也可以玩冷兵器近战流,玩成僵尸无双。
这个游戏有个设定,近战攻击伤害除了跟打击部位和武器方向(比如斧刃方向)有关外,也跟击中瞬间的瞬时速度挂钩,力度控制好了,中低难度下砸狗头一下一个。
但到了最高的战神难度,怪的血量大增,近战兵器伤害不够只能攻速补,打怪打得像拿着两把菜刀剁肉馅一样,虽然游戏里也有一个隐藏的长柄重兵器,但由于伤害只跟瞬时速度有关,而人挥舞手柄的速度始终有限(如果不想手柄飞出去的话),抡圆了砍也不可能提高伤害,根本体现不了重兵器招大力沉的特性。
----------------------------
现在VR或者体感类的冷兵器格斗游戏都很容易遇到这个问题,因为手柄的重量是固定的,哪怕在游戏世界里玩家拿的是一把重兵器,玩家也可以用挥舞小刀的速度乱挥巨斧巨锤,如果设置触碰即出伤害的话,王八剑乱砍一通伤害是最高的。
所以个人脑洞了一下:冷兵器攻击力和动能是挂钩的,而与动能相关的公式,除了一个和质量速度相关的1/2mv^2,还有一个力和距离相关的FS。
所以我想,能不能把玩家对手柄施力看做是一个固定值,虚拟世界里武器的动能,与手柄的移动距离(或者说划过轨迹的长度)挂钩呢?
比如这个例子,A手持一把菜刀,用剁肉的方法上下晃动,尽管攻速非常快,但因为挥舞的行程(或者说划过的轨迹)短,实际力度低,导致伤害不足,不破防。
而B手持巨斧,论圆了从上到下砍下去,尽巨斧划过的轨迹很长,一下的伤害非常高,而玩家要做出这种大动作也快不到哪里去,从而在物理上限制了攻速。
类似一般动作游戏蓄力提高伤害的设定,在VR游戏中可以采用划过的距离来代替蓄力,根据不同的武器设置一个蓄力上限。轻兵器蓄力上限低,所以短行程高攻速输出更高,而重兵器蓄力上限高,所以论圆了砍更有利。
----------------------------------
关于实现的方法,个人是这样想的。
首先,必须限制玩家不能乱挥,抖手乱挥划过的轨迹也很长,但显然乱挥不可能提高冷兵器的打击力度,必须符合某种特定的规则才行。
对于刺杀类武器来说,以长矛为例,就是矛尖划过的轨迹,应该尽可能在一条直线上。
对于挥砍类武器来说,以斧头为例,就是斧刃划过的轨迹,应该是一条弧线,或者说一个扇面。
-------------------------------------------------
个人的想法,刺击武器轨迹规则如上图,假设玩家手持长矛刺击,矛尖划过的轨迹,依次经过P1 P2 P3 三个点,P2->P3的方向,应该不偏移P1->P2的方向太多。
(以我还给数学老师的解析几何姿势)用数学的方法来描述的话就是:
P1->P2的模M12=开平方[(P2.x-P1.x)^2+(P2.y-P1.y)^2+(P2.z-P1.z)^2]
P2->P3的模M23=开平方[(P3.x-P2.x)^2+(P3.y-P2.y)^2+(P3.z-P2.z)^2]
偏移率=开平方{ [(P3.x-P2.x)/M23-(P2.x-P1.x)/M12]^2+[(P3.y-P2.y)/M23-(P2.y-P1.y)/M12]^2+[(P3.z-P2.z)/M23-(P2.z-P1.z)/M12]^2}
这个偏移率小于一定值那么认为轨迹近似为直线。
----------------------------------
而对于砍这个动作,划过的轨迹应该是一个弧线,这就比较复杂了。
个人的想法是,如果是砍的动作,弧线应该近似在同一个扇面/平面内,至少不偏离太远(比如左右横扫的动作,不能上下偏移太多,或者从上到下砍的动作,不能左右偏太多).
那么假设玩家用一把单手斧砍,可以通过检查斧刃部位划过的轨迹,是否近似在同一个扇面/平面上,来判断这个砍的动作标不标准。
假设玩家依次经过P1 P2 P3 P4 四个点,用数学来描述就是:
//P1,P2,P3为之前三个坐标
//通过P1,P2,P3三点,可以确定一个平面,这个平面的平面方程ax+by+cz+d=0,那么有
a=(P2.y-P1.y)*(P3.z-P1.z)-(P2.z-P1.z)*(P3.y-P1.y);
b=(P2.z-P1.z)*(P3.x-P1.x)-(P2.x-P1.x)*(P3.z-P1.z);
c=(P2.x-P1.x)*(P3.y-P1.y)-(P2.y-P1.y)*(P3.x-P1.x);
d=0-(a*P1.x+b*P1.y+c*P1.z);
//P4是现在经过的坐标
//R=点面距离,P4与P1,P2,P3三点所在平面的点面距离,取绝对值
R=|(P4.x*a+P4.y*b+P4.z*c+d)/开平方(a^2+b^2+c^2)|;
//rate=相对平面的偏移率,点面距离/P4和P3之间的距离
rate=R/开平方[(P4.x-P3.x)^2+(P4.y-P3.y)^2+(P4.z-P3.z)^2];
偏移率小于一定值就认为没有左右偏离。
-----------------------------------------------------
如果玩家的动作符合规则,那么就可以计算伤害了。
最简单的,自然是按照矛尖/斧刃划过的轨迹长度来计算伤害了。
但这可能会导致一个问题就是,假设玩家拿着一把斧头,因为斧头没有足够的真实重量,只靠动手腕砍下去(类似菜刀剁肉馅的发力方式),斧刃划过的轨迹就可以跟大幅身体动作差不多。
所以个人的想法,是用玩家双手划过轨迹的距离来计算伤害,矛尖/斧刃划过的轨迹只用来判断动作是否标准,这样只用手腕发力,尽管斧刃划过的轨迹符合规则,但因为手的移动距离短,所以伤害并不高。
假设一个人臂长60-70,人高举过头再劈下,手柄划过的轨迹大概大概100,手臂直刺的轨迹大概是60-70,向前一步直刺是100左右。
这么长的轨迹,玩家需要相当大的动作幅度,付出较大的体力消耗和较多的“蓄力”时间,换来更高的伤害,从而攻速限制(物理)和体力条(物理),并且如果玩家高举手柄的话,抬高自己的手臂也需要消耗一定体力,可以用来计算武器重力势能加成。
---------------------------------
所以个人的想法就是,每隔一段时间,记录一下玩家手的位置,然后判断玩家的动作是否符合规则,如果符合的话,蓄力条增加一定值(根据玩家手臂实际移动距离),不符合的话则减少一定值或者清零,最后用击中敌人时,蓄力条的值来计算伤害。
总结一下,就是通过斧刃划过的轨迹,判断玩家的动作是否标准,然后根据玩家做出动作时,双手的移动距离计算力度,动作标准,双手动作大,伤害才高。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|