骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 2578|回复: 7

[功能与代码] 【未写完】打败引擎硬核-关于骑砍各系统飞行等复杂位移功能实现与互相辅助

[复制链接]

212

主题

1033

回帖

1049

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
2893127
第纳尔
14847
精华
0
互助
93
荣誉
21
贡献
325
魅力
1382
注册时间
2017-11-5
鲜花(431) 鸡蛋(0)
发表于 2022-10-18 17:21:41 | 显示全部楼层 |阅读模式
本帖最后由 vegetto 于 2023-1-10 10:59 编辑

前言:我的全体mod都是以txt为基础,所以局部变量都是采用var的写法pos什么不考虑复用slot都是数字序号,你们重在理解即可。且我只讲自己研究的部分,涉及前人的成果的其他办法请自行搜索查找,莫一代代陷入重复劳动和仿写的循环中。https://bbs.mountblade.com.cn/thread-2094114-1-1.html这个是我一系列骑砍战团模型程序研究成果的目录篇,用来汇集一些分散的我的技术贴,还没更新多少,将会持续更新一些你们不常见的冷门技术。(759523711我的魔兽争霸mod开发群可以加群学习,定时分享一些其他技术成果,来自我的一系列自制mod https://bbs.mountblade.com.cn/thread-2093251-1-1.html的研究)


以下正文:

这个涉及的东西比较多,后续要细讲几次,慢慢更。

首先要求多角度看问题,不同性质的物体找出他们相同性质的操作原理。
所以既然本文是关于骑砍各个系统的位移如飞行功能实现和互相辅助,我将从场景物,agent人,粒子等不同系统说明如何制作和他们飞行有关的功能等特殊的位移控制,并且他们之间互相辅助互相套皮相辅相成的几种的做法。
关于这个功能,不可避免的需要一些综合性的知识,比如很多位移要处理碰撞的检测等等,以下分开细讲,引申太多则另外专篇。


首先针对新人讲一下骑砍位移和运动有关的一些基础知识。



--------------------------------------------------------以下是关于骑砍各个不同模块的研究对象的运动基础讲解-------------------------------------------------------------------------------------------------


首先要掌握运动本身的操作,重点关注所有含position的op操作,构成运动最基础的是两大类操作,一个是控制位置的坐标变化,比如平移旋转坐标,一个是控制对象实际的位置改变,比如set和animate相关的op。

所谓运动是一种位移,世界没有绝对很多是相对的,位移是一种位变,即位置变化,所以骑砍的运动或位移控制就是围绕位置坐标随触发条件(比如触发时间间隔)的改变来实现的,就比如

  (get_player_agent_no, ":var_0"),
  (agent_get_position, pos1, ":var_0"),
  (position_move_y, pos1, 50),
  (agent_set_position, ":var_0", pos1),
意思就是一次触发条件下形成“先将玩家设为局部变量":var_0"(就像部队喊人不喊名字,喊007,方便指挥,所以对一个对象的控制,要先设其为某某量),得到玩家的坐标后往前设置50的距离,在把玩家自身设置到位置变化后的坐标位置。”的结果
然后就按照上面的触发条件,如果一次性的,就是位置的改变,连续的,就是一种位移和运动效果。


(scene_prop_get_instance, ":var_0", "spr_samuro", 0),
  (prop_instance_get_position, pos1, ":var_0"),
   (position_move_y, pos1, 50),
  (prop_instance_set_position, ":var_0", pos1),  
或  (prop_instance_animate_to_position, ":var_0", pos1, 控制速度的数值),


看到吧,这个是将spr_samuro一次触发条件下形成“先将samuro这个场景物设局部变量":var_0",得到场景物的坐标后往前设置50的距离,在把场景物自身设置到位置变化后的坐标位置。”的结果
set是瞬间设置位置,animate是按照最后一个参数的速度慢慢匀速移动过去。

(scene_prop_get_instance, ":var_0", "spr_none", 0),   #"spr_none"是一个无形看不见几何外形色彩的场景物
  (prop_instance_get_position, pos1, ":var_0"),
   (position_move_y, pos1, 50),
  (prop_instance_set_position, ":var_0", pos1),  
或  (prop_instance_animate_to_position, ":var_0", pos1, 控制速度的数值),
(particle_system_burst, "psys_fire", pos1, 1),  
这个就是以一个无形的prop场景物作为位移载体,带特效一起跑。

所以由此看,无论你是物品场景物还是人什么系统,自我的六向性和旋转性的位移写法都差不多(但不同系统要开发不同的限制,比如agent人要上天入地,要 加  (agent_set_no_dynamics, ":var_0", 1),关闭动力学,又如prop开启动力学又会影响这种主动位移控制,再如粒子不能获取当前位移必须有有形载体如场景物人体或无形载体比如全局变量记录首发位置pos),都是将目标自己当前位置的坐标进行平移旋转(特别是注意旋转也是这样写),然后设置过去。

自我的六向性平移和旋转性的位移能够处理常规的玩家及ai的自由飞行,场景物的自由飞行以及粒子的规则指向路径。
但是特殊的,涉及到目标点对目标点,比如让场景物直接移动到一个特定的其他人或物体或点,
(scene_prop_get_instance, ":var_0", "spr_老大", 0),  #为了方便写中文,spr后面请写英文
(scene_prop_get_instance, ":var_1", "spr_老二", 0),
  (prop_instance_get_position, pos1, ":var_1"),   

  (prop_instance_set_position, ":var_0", pos1),  # 像这个就是老大瞬移到老二,但是还有一种理解,就是如果条件持续且本身两种位置在一起,可以理解一种伴随和从动,目的为了某些形体的组合等等
或  (prop_instance_animate_to_position, ":var_0", pos1, 控制速度的数值),  # 像这个就是老大按一定速度向老二靠拢,就是如果条件持续且本身两种位置在一起,也可以理解一种伴随和从动,但是如果触发器东西多,animate会带来运动延迟,无法保证视觉上的永远重合位置,并且最好不要出现距离长又慢速还带位置旋转量的animate一次设置,否则你的运动曲线比较飘逸,最好是始终干预运动过程。
所以对于不同研究对象是需要一些额外的判断但也有共性的东西,比如场景物prop有animate的支持,但是agent没有,没有就不能学prop类似处理么,当然可以。




--------------------------------------------------------以上是关于骑砍各个不同模块的研究对象的运动基础讲解-------------------------------------------------------------------------------------------------


--------------------------------------------------------以下是关于骑砍各个不同模块的研究对象飞行等特殊位移机制的关键突破口讲解和可以应用的一些场合-------------------------------------------------------------------------------------------------



前言:如果你可以把不同研究对象的飞行都做出来,你做任何花哨的位移都是小case,所以重点讲下不同模块的研究对象飞行等特殊位移机制。本章节讲总体原理和适用场合,后面再附上实例。


   一、agent即游戏中人的飞行机制:
一般来说玩家的飞行和飞马研究历来由久,基本上大多数人就只知道马的骑马高度(小白级),利用动作flag的位移参数(高级),利用场景物的拖拉拽力(高级),这些已经研究成熟的你们自己搜,我不多说,至于场景物的辅助运动我本来后面要连带讲。


但是有个方法极少可以说目前独家,是几年前我第一个发现,告诉一些人,但没用传播开,就是(agent_set_no_dynamics, "填agent的id", 填0或1), 最后参数默认是0,改为1就可以实现agent飞行。
-------
不过首先给你们先理一理两种状态的agent在z值坐标改变的位移上的区别:
agent默认状态即(agent_set_no_dynamics, "填agent的id", 0), 时
设置位置包括开局的刷出,如果设置的坐标在场景范围内即在获取场景范围时(get_scene_boundaries, pos2, pos3)坐标的横纵坐标在pos2和3的xy坐标之间,会降落在设置坐标xy值不变但是Z值下方碰撞最高的点位或地面,
这个说法就是告诉你,如果你人设置移动的位置处有三层楼,坐标下面有两层楼,上面是第三层,那按第二层的地板算设置位置点。
如果你设置人位置到地形地面以下,地形的地面以下的人脚下没藏着其他碰撞点你会在地面,地形的地面下方有碰撞,人低于地面太多会掉下去,所以不要在地面下藏一些奇怪的东西再使用奇怪的位移手段。
--------
agent特殊状态设置即(agent_set_no_dynamics, "填agent的id", 1)时

示例:
(get_player_agent_no, ":var_0"),
  (agent_set_no_dynamics, ":var_0", 1),
  (agent_get_position, pos1, ":var_0"),

  (position_move_z, pos1, 50),
  (agent_set_position, ":var_0", pos1),
表示玩家在一次触发下,悬空设置在触发前自身坐标上方50cm处,并且不会掉下来。


(agent_set_no_dynamics, "填agent的id", 1), 的效果就是关闭了agent的动力学,使得agent这个游戏人可以把自己悬空设置在任意3d空间位置,无论上天入地,但是失去了重力和其他场景物人体碰撞的推力挤压力影响,失去了自己本身的位移方式(即agent_set_scripted_destination这种op失效),但其他的打人被打死亡和骨骼动画什么的均还能使用。特别的,如果agent脚距离地面很近,动力学设置不影响agent原地旋转。
当通过设置no_dynamics为1使得玩家升空后,重新设置no_dynamics为0,可使得玩家掉落(如果是遁地的话,注意遁的是地形生成的地,要看你身体与地形的相对位置,如果你身体到地下一半,会慢慢升起来,如果脑袋下去了就不一定能自动在默认状态回地面),agent同理但是有所区别,原因在于我下面说的缺陷2。

战团使用的唯一场合:
1.结婚时使得人物固定位置,所以从注释上,官方可能也想不到这个操作会被用来做飞行,实际上可以用来强制保持当前位置,像agent_set_scripted_destination这种遇到敌人冲击,还是不一定完全能保持站位,这个具有强制作用,其实我用这个操作op利用这个强制站位的属性比利用它来做飞行类移动功能还要应用的场合多。


使用的注意点和相关缺陷:
1.连续打击可能造成身体硬直某一点动画帧,但靠近地面时比较容易这样。
2,你们见过有人贴吧发图,什么工程车上有人抽走车木板人悬空下不来,大标题发帖一写:斗宗强者恐怖如斯,骗一些无知回复。听我上面的介绍,你们现在是不是会以为是这样做agent自己把no_dynamics设1了,错,不可能的,原因就是agent处于上升位移的时候,会在脚下形成一个连编辑模式都看不见的空气面,使得系统获得agent当前用  (position_get_distance_to_ground_level,这个op获得的距离地面高度接近0,然后你突然上升位移阶段来个落脚碰撞点的突变,就会出现这种bug,系统会生成一个无形的名义地面在脚下,但是你不停移动过程中会反复移除添加这个东西,当你运动状态变化太突然,这个东西就来不及给你收走,你就悬在空气板上了且没有任何手段移除,除非你考虑到这种情况进行位移的二次调整。遇到这种情况的话处理简单点说下:
首先构造位移不要在位移处于持续上升位移阶段突然关闭这个效果,然后构造位移的距离与时间比值的模拟速度不可在改变动力学效果前的一小段时间内太小。具体原因后面涉及碰撞效果内容我细讲。


运动应用:
agent的位移控制只有set pos没用animate to pos,如果单纯直接构造的话,从概念理解,set就是设置位置,animate是以极小微元的间隔在起点目标点之间不停改变设置位置。所以对于连续运动,如果连续时间性的触发条件内 position_move_一个较小的数值就会展现运动的视觉效果,但是如果利用prop的animate操作辅助一下agent的运动会更便利,如下;


引申类比总结:
你看,场景物也有dynamics设置op,这样一来两个系统是不是就在这个方面很像,可以理解为agent默认开启动力学,prop场景物默认关闭动力学。所以如果他们很像有没有办法利用他们互相没用的优势结合,扬长补短。


  (scene_prop_get_instance, ":var_0", "spr_none", 0),  #"spr_none"是一个无形看不见几何外形色彩的场景物
  (prop_instance_get_position, pos1, ":var_0"),  #...此处省略若干对pos1的各种位移改变或者pos1位置的对象另有其他

  (prop_instance_set_position, ":var_0", pos1),  
或  (prop_instance_animate_to_position, ":var_0", pos1, 控制速度的数值),
      (get_player_agent_no, ":var_1"),
     (agent_set_no_dynamics, ":var_1", 1),
      (agent_set_position, ":var_1", pos1),


上面意思就是,一个叫spr_none的无形场景物利用agent没有的animate进行复杂且匀速的位移操作,然后将玩家这个agent no_dynamics设1可以和默认的场景物prop状态一样上天入地后,把玩家的位置设置在场景物自己的实时位置,这样我们是不是就利用场景物做复杂位移的优势加上我们所需要的玩家的形体和攻击等外在特征,有机结合起来。
当然如果你做的是一个正常的武侠人等等,哪怕是超能力,也不会时刻都穿墙运动,所以往往要进行碰撞检测的配套代码研究,这个后面另讲。




其实上面差不多连带介绍了场景物的运动控制,所以后面写一些应用的自己的代码实例给你们讲解下怎么妙用。



--------------------------------------------------------以上是关于骑砍各个不同模块的研究对象飞行等特殊位移机制的关键突破口讲解和可以应用的一些场合-------------------------------------------------------------------------------------------------


--------------------------------------------------------以下是关于骑砍各个不同模块的研究对象飞行等特殊位移的一些自己的代码实例----------------------------------------------------------------------------------------------------------------------------


--------------------------未完待续














评分

参与人数 1第纳尔 +20 互助 +1 魅力 +20 收起 理由
Aomine Daiki + 20 + 1 + 20 文章不错,继续努力!

查看全部评分

212

主题

1033

回帖

1049

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
2893127
第纳尔
14847
精华
0
互助
93
荣誉
21
贡献
325
魅力
1382
注册时间
2017-11-5
鲜花(431) 鸡蛋(0)
 楼主| 发表于 2022-10-18 17:39:36 | 显示全部楼层
本帖最后由 vegetto 于 2023-1-12 09:39 编辑

接下来由粗糙到细节,由浅入深,从玩家到ai,给你们看看一些应用方法,以及同一种写法可以使用的不同场合和引申

玩家单体控制篇

实例1:不考虑碰撞的情况下,如何将玩家进行主动的六向无视碰撞地形的飞天遁地移动:


   (0.000000, 0.000000, 0.000000,
    [
    ],
    [
        (get_player_agent_no, ":var_0"),      
        (agent_get_position, pos1, ":var_0"),
        (try_begin),
            (agent_slot_eq, ":var_0", 30, 0),     #玩家的序号为30的agent slot,可以你们自己定义,就像全局一样,记录数据来记录状态改变而已
            (key_clicked, key_u),
            (agent_set_slot, ":var_0", 30, 1),
            (agent_set_no_dynamics, ":var_0", 1),
        (else_try),
            (agent_slot_eq, ":var_0", 30, 1),
            (key_clicked, key_u),
            (agent_set_slot, ":var_0", 30, 0),
            (agent_set_no_dynamics, ":var_0", 0),   #以上表示按U一次可以切回玩家no_dynamics开启和关闭的状态互切
        (try_end),
        (try_begin),                                            #看下方整体解释
            (this_or_next|key_is_down, key_w),
            (this_or_next|key_is_down, key_a),
            (this_or_next|key_is_down, key_s),
            (this_or_next|key_is_down, key_d),
            (this_or_next|key_is_down, key_v),
            (key_is_down, key_left_control),
            (agent_get_look_position, pos4, ":var_0"),
            (position_copy_rotation, pos1, pos4),
        (try_end),                                       #以上代表了如果玩家按了wasdv和左边的ctrl键,pos1就会复制玩家视角
        (try_begin),
            (agent_slot_eq, ":var_0", 30, 1),           #agentslot30为1对应了无动力学状态,所以为什么我要给一个slot,就是抓住了刚进场景大家都是动力学状态,但是没用op操作获取这个状态,那就自己构造一个
            (try_begin),
                (key_is_down, key_w),
                (position_move_y, pos1, 20),
            (else_try),
                (key_is_down, key_a),
                (position_move_x, pos1, -20),
            (else_try),
                (key_is_down, key_s),
                (position_move_y, pos1, -20),
            (else_try),
                (key_is_down, key_d),
                (position_move_x, pos1, 20),
            (else_try),
                (key_is_down, key_v),
                (position_move_z, pos1, 20),
            (else_try),
                (key_is_down, key_left_control),
                (position_move_z, pos1, -20),
            (try_end),                                  #以上表示了按住wdas v 左手的ctrl键(注意游戏里ctrl,shift这些键盘上不唯一的按键是占两个键位的)那就前后左右上下把玩家的位置以玩家视角的角度把坐标移动20厘米
            (agent_set_position, ":var_0", pos1),         设置无动力学的玩家按照20厘米/触发器内置间隔时间的运动速度来移动。速度这种东西是你自己 把握的,要精确数值可以配合store timer a获取准确时间,不需要精确数值可以利用触发器内置间隔时间执行次数来控制
        (try_end),      

#  (agent_set_visibility, ":var_0", 0),   #玩家进行影身
       # (mission_cam_set_mode, 1),             #引申应用1: 游戏摄像机镜头控制功能,假如把蓝色字体的#去掉,在玩家的pos1位置设置摄像机,则玩家人的位置即为摄像机位置,加上对玩家的影身 ,那么控制玩家位移便是控制摄像机镜头位移
        #(mission_cam_set_position, pos1),  

    ]),

实例2:不考虑碰撞的情况下,如何将场景物进行主动的六向无视碰撞地形的飞天遁地移动【一般用于抛弃玩家本体,自己驾驶飞机但不显示人或者自己就是个飞龙或怪物时可配合顶点动画,配合碰撞检测代码(后面再写)】:
   (0.000000, 0.000000, 0.000000,
    [
    ],
    [
  
(get_player_agent_no, ":var_0"),                                #知道为什么都场景物运动了,我还要获取玩家干什么,看下面两个copy rotation了解我的目的
(agent_get_position, pos1, ":var_0"),                     #玩家的坐标,实时获取
(scene_prop_get_num_instances, ":var_10", "spr_dragon"),   #判断spr_dragon这个需要后面控制运动的场景物有几个
(try_begin),
    (eq, ":var_10", 0),  
    (set_spawn_position, pos1),
    (spawn_scene_prop, "spr_dragon"),   #以上意思就是spr_dragon数量为0就在玩家的位置点pos1刷一个出来,主要就是场景物如果没有事先放置,你就要给刷一个,数量就是控制执行一次的条件。
(try_end),
(eq, ":var_10", 1),  
(scene_prop_get_instance, ":var_1", "spr_dragon", 0),     #飞行的对象就是spr_dragon这个场景物
(prop_instance_get_position, pos2, ":var_1"),     #场景物的坐标,实时获取
#(agent_set_no_dynamics, ":var_0", 1),   #引申做法1: 如何把实例1与实例2结合,也就是我前面讲的把agent和prop的运动优势结合。把深蓝字体的#注释去掉,通过场景物影其形,只留其运动控制与agent人之形结合。 也就是怎么搞的话实例2做的东西和实例1效果是差不多的。
#(scene_prop_set_visibility, ":var_1", 0),  #场景物影身
#(agent_set_position, ":var_0", pos2),     

(try_begin),
    (this_or_next|key_is_down, key_w),
    (this_or_next|key_is_down, key_a),
    (this_or_next|key_is_down, key_s),
    (this_or_next|key_is_down, key_d),
    (this_or_next|key_is_down, key_v),
    (key_is_down, key_left_control),
    (agent_get_look_position, pos4, ":var_0"),
    (position_copy_rotation, pos1, pos4),
(else_try),
    (position_copy_rotation, pos1, pos2),
(try_end),                                                                 #上面这段要配合下面镜头控制前的copy_rotation看,你们玩游戏有没有注意一个细节,就是玩家打人移动时镜头是视角方向,但是如果玩家站立不同,晃动鼠标旋转可以上下查看周身
(try_begin),
    (key_is_down, key_w),
    (position_move_y, pos2, 80),
(else_try),
    (key_is_down, key_a),
    (position_move_x, pos2, -80),
(else_try),
    (key_is_down, key_s),
    (position_move_y, pos2, -80),
(else_try),
    (key_is_down, key_d),
    (position_move_x, pos2, 80),
(else_try),
    (key_is_down, key_r),
    (position_move_z, pos2, 80),
(else_try),
    (key_is_down, key_left_control),
    (position_move_z, pos2, -80),
(try_end),                              #以上是为了让玩家在按r ctrl adws,上下左右前后将场景物的坐标按此方向移动80,但是首先运动时基准角度是玩家的视角方向,这样可以进行俯冲仰冲等等360度无死角自由的多向移动。所以涉及到运动旋转转弯的时候,巧用    (position_copy_rotation, 移动坐标, 视角坐标),的坐标复制十分便捷
(prop_instance_animate_to_position, ":var_1", 2, 5),    最后一个参数速度随你们调,不过我一般直接不写,因为我现在是高频触发,animate的运动效果的均匀化对我前面的位移控制影响不大,但是会降低移动速度,也就是animate不写参数和setpos还是有区别的,不写因为系统0.000触发还有微弱时间间隔。
(try_begin),
    (neg|key_is_down, key_w),
    (neg|key_is_down, key_a),
    (neg|key_is_down, key_s),
    (neg|key_is_down, key_d),
    (neg|key_is_down, key_r),
    (neg|key_is_down, key_left_control),
    (agent_get_look_position, pos3, ":var_0"),
    (position_copy_rotation, pos2, pos3),
(try_end),                                                #这个就是我上面解释的,为了保证玩家运动时镜头平行视角能360度自由飞行,静止时可以晃动鼠标查看周身。
(try_begin),
# (scene_prop_set_visibility, ":var_1", 0),  #将场景物影身
    (position_rotate_x, pos2, 10),      #引申应用2: 游戏摄像机镜头控制功能,假如把深蓝色字体的位移修正代码用#注释禁用,把浅蓝色的字体代码#注释符号拿掉启用,在场景物的pos2设置摄像机,则场景物位置即为摄像机位置,如果场景物影身或者本身就定义成不具备外表的空模型,那么控制场景物便是控制摄像机镜头
    (position_rotate_z, pos2, -15),
    (position_move_y, pos2, -125),   #数值根据场景物的体型和性质调整
    (position_move_z, pos2, -10),   #数值根据场景物的体型和性质调整
    (position_move_x, pos2, -15),
    (mission_cam_set_mode, 1),   #设为1摄像机将像agent场景物一样自由控制位置,否则就是你们常见的固定在肩部。后面我建议如果该场景物具备飞行和着陆条件,镜头位置应该分开写,因为着陆后的视野会窄一点。
    (mission_cam_set_position, pos2),     #这个是镜头调整,将摄像机调整到主动控制运动的物体身后的某个位置,也就是你希望镜头以第一/三人称观察哪个运动对象,就以哪个运动对象的pos调,最好你们自己重调,因为我后面涉及到这些的mod改太复杂了,应用的对象五花八门不是人,所以这个参数按场景物自身体型大小来调整,一般就是y坐标往后拉,这样可以展现物体整个后部,然后Z上调一点,因为一般物体的pos在自己脚下,比如这个物体是个龙,你至少z要调脑袋高,然后为什么我上面还涉及到旋转呢,因为我这个格斗游戏启发,因为格斗游戏人物身体会侧移,然后呢,空中生物最好视角往身体下方转一下,再左侧转一下,展现生物的部分侧面模型,不然正对后背,飞起来就会感觉有一种固定视角的贴图感觉
(try_end),
    ]),
未完待续-------------------后面用例将另外开贴,以上是运动控制基础贴,具体用法将长期黏贴我后面补充的各分贴实例或理论内容。
比如这个帖子,将上面六向运动但不受碰撞重力影响的情况,针对不同生物器具对象,进行更细的分析和代码控制分化:


爬行飞鸟各生物及飞行器装甲车大炮等对象运动行为控制特性的联系与区别方法论 https://bbs.mountblade.com.cn/thread-2096336-1-1.html











31

主题

210

回帖

187

积分

见习骑士

Rank: 3

UID
2462463
第纳尔
1587
精华
0
互助
23
荣誉
0
贡献
0
魅力
83
注册时间
2015-3-3
鲜花(58) 鸡蛋(0)
发表于 2023-3-1 10:32:58 | 显示全部楼层
问一下,
(prop_instance_animate_to_position, ":var_0", pos1, 控制速度的数值),
      (get_player_agent_no, ":var_1"),
     (agent_set_no_dynamics, ":var_1", 1),
      (agent_set_position, ":var_1", pos1),
这段只能移动一次,是不是要用
(0.000000, 0.000000, 0.000000,
类型的触发器实现一直跟着这个隐藏参考物平滑移动啊

212

主题

1033

回帖

1049

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
2893127
第纳尔
14847
精华
0
互助
93
荣誉
21
贡献
325
魅力
1382
注册时间
2017-11-5
鲜花(431) 鸡蛋(0)
 楼主| 发表于 2023-3-1 10:39:37 | 显示全部楼层
战争傀儡阿格兰 发表于 2023-3-1 10:32
问一下,这段只能移动一次,是不是要用类型的触发器实现一直跟着这个隐藏参考物平滑移动啊

是,到MT里持续用

31

主题

210

回帖

187

积分

见习骑士

Rank: 3

UID
2462463
第纳尔
1587
精华
0
互助
23
荣誉
0
贡献
0
魅力
83
注册时间
2015-3-3
鲜花(58) 鸡蛋(0)
发表于 2023-3-1 13:31:22 | 显示全部楼层
话说请教下,有没有让射出去的弓箭等飞行物,穿墙的方法啊,好像默认碰撞就是一个点,箭本身不带碰撞模型的

212

主题

1033

回帖

1049

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
2893127
第纳尔
14847
精华
0
互助
93
荣誉
21
贡献
325
魅力
1382
注册时间
2017-11-5
鲜花(431) 鸡蛋(0)
 楼主| 发表于 2023-3-1 16:28:41 | 显示全部楼层
本帖最后由 vegetto 于 2023-3-1 16:34 编辑
战争傀儡阿格兰 发表于 2023-3-1 13:31
话说请教下,有没有让射出去的弓箭等飞行物,穿墙的方法啊,好像默认碰撞就是一个点,箭本身不带碰撞模型的

没有完全通用一步登天的方法,看研究对象和场合,是否通用和对哪个对象通用,来选择合适的方法,有如下3法:
1.作为墙的场景物不要求普遍性通用即只有少数几种允许穿的障碍物且对箭矢种类无要求时,可以场景物文件这类场景物加特定flag忽略箭矢;
2.作为“墙”的障碍物场景物需要普遍通用穿特定箭的,能穿墙的箭矢所用弓种类不多时,可以用模拟远程重做部分攻击系统,用场景物运动代替missle,单纯控制场景物运动可以无视碰撞。
3.特别的,部分带动态的场景物可以操作清除身上的箭矢,清除后在物体后方重新发射同一个箭矢即可

然后要注意,已经射出和击中物体和人体后的箭矢不能参照场景物性质控制,只有放到地上的才算

31

主题

210

回帖

187

积分

见习骑士

Rank: 3

UID
2462463
第纳尔
1587
精华
0
互助
23
荣誉
0
贡献
0
魅力
83
注册时间
2015-3-3
鲜花(58) 鸡蛋(0)
发表于 2023-3-1 16:59:30 | 显示全部楼层
vegetto 发表于 2023-3-1 16:28
没有完全通用一步登天的方法,看研究对象和场合,是否通用和对哪个对象通用,来选择合适的方法,有如下3 ...

十分感谢!很有用!找到个sokf_missiles_not_attached,研究研究

0

主题

2

回帖

1

积分

平民

Rank: 1

UID
3234918
第纳尔
21
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-4-26
鲜花(0) 鸡蛋(0)
发表于 2023-5-16 13:27:45 来自手机 | 显示全部楼层
优秀,能不能留个qq号呢,沟通交流一下
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2024-12-27 12:01 , Processed in 0.151998 second(s), 27 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表