- 好友
- 12
- 在线时间
- 486 小时
- 最后登录
- 2024-11-7
子爵[版主]
- UID
- 2893127
- 第纳尔
- 14847
- 精华
- 0
- 互助
- 93
- 荣誉
- 21
- 贡献
- 325
- 魅力
- 1382
- 注册时间
- 2017-11-5
鲜花( 431) 鸡蛋( 0)
|
本帖最后由 vegetto 于 2024-9-3 19:04 编辑
之前已经写过类似贴,并且很多同志也有突破。除了场景物托人、agent no dynamic取消重力物理效果使得可以坐标设置3D空间、以及骨骼动作参数调整 这三种办法外,我现在介绍第4种方法——【attatch碰撞挤压法】,不谈优劣,只谈扩散思维,一题多解。
首先这个碰撞在brf里的形状大小参考我的图片,是一个在人脚底的水平放置的正方体板子形状的模型生成的碰撞。
这个attach prop碰撞和直接用prop碰撞控制prop移动来托有什么区别呢,区别就是prop碰撞托就是以碰撞来托住人的脚底,相当于人踩在一个会移动的“地面”上,而attach产生的位移效果来源于更复杂的hitbox与colliision两种碰撞类型的挤压运动关系,并且由于attach每次只能固定一个身体相对坐标的位置,所以不能靠prop的运动控制来控制移动,而是靠挤压方向和部位来控制。
多说无益,示例和解释如下:
module_scene_props注册一个场景物
("ppp", 0, "0", "ppp", []),
则碰撞体在brf里命名就叫ppp
在mt里(0.000000, 0.000000, 0.000000, 条件写一个玩家飞的参考模板
(get_player_agent_no, ":var_0"),
(scene_prop_get_num_instances, ":var_2", "spr_ppp"),
(agent_get_position, pos1, ":var_0"),
(copy_position, pos2, pos1),
(try_begin),
(eq, ":var_2", 0),
(key_clicked, key_right_alt),
(position_move_y, pos2, 400),
(position_move_z, pos2, 500),
(position_set_z_to_ground_level, pos2),
(position_move_z, pos2, -500),
(set_spawn_position, pos2),
(spawn_scene_prop, "spr_ppp"),
(agent_set_attached_scene_prop, ":var_0", reg0),
(try_end),
(try_begin),
(key_clicked, key_j),
(agent_set_attached_scene_prop_z, ":var_0", 100), #attach的碰撞在头上方
(else_try),
(key_clicked, key_v),
(agent_set_attached_scene_prop_z, ":var_0", 60), #attach的碰撞在眼睛附近
(else_try),
(key_clicked, key_b),
(agent_set_attached_scene_prop_z, ":var_0", -20), #attach的碰撞在腰附近
(else_try),
(key_clicked, key_n),
(agent_set_attached_scene_prop_z, ":var_0", -60), #attach的碰撞在脚底但偏上一点
(else_try),
(key_clicked, key_m),
(agent_set_attached_scene_prop_z, ":var_0", -50000), #在超远的下方 ,可考虑在这些操作里加关闭开启碰撞的op
(try_end),
##################
分别讲一下不同attach部位的效果,如果你把一个有厚度的平板碰撞绑定在单位脚底偏上,也就是和脚有重叠的部分,则单位会不断上升,原因是两个碰撞互相挤压,系统认为你attach的碰撞是地面,就想把你脚底淹没在“地下”的部分自动抬起来,但是由于碰撞是attach状态,则又跟随你上升,产生死循环,使得agent不停的上升。
如果碰撞绑定在腰间,你在空中会向前移动,此时你甚至可以保留agent的碰撞判定以及不干扰agent在空中根据步行及视角方向改变移动方向。
如果碰撞绑定在脑袋和脖子附近,且与该身体部位的hitbox有重叠,会重重的把你从空中往下高速坠落,产生极高的致死伤害(所以你要配合ti on agent hurt条件将来自自身的伤害清0)
如果碰撞绑定位置脱离身体范围,那么没有什么效果,地面正常走,天空中则正常自由落体。
此外图片中的碰撞只是水平放置的效果,如果改为有一定倾斜角度,和代码 控制attach部位结合,还会产生其他位移效果,比如如果我稍微在brf把碰撞向后转一定角度,会产生斜向的飞行效果,就不是竖直了。
但是,但是,但是,这种实现飞行的功能做法有一定弊端,我后面再介绍。
|
-
-
|