- 好友
- 12
- 在线时间
- 486 小时
- 最后登录
- 2025-10-17
子爵[版主]
  
- UID
- 2893127
- 第纳尔
- 14867
- 精华
- 0
- 互助
- 93
- 荣誉
- 21
- 贡献
- 325
- 魅力
- 1384
- 注册时间
- 2017-11-5
 鲜花( 435)  鸡蛋( 0)
|
本帖最后由 vegetto 于 2025-10-16 22:06 编辑
之间讲过spawned item 可以成为无碰撞体的prop性质,受各种prop抬头的op操作并且还能受prop prune time的作用永久删除id,这样可以解放过去部分批量操作sceneprop无法删除而不得不复用id的困难,使得可以放开手刷场景类物体操作,也因此因为可以操作生命周期且可以继承prop的放缩、移动、顶点动画、材质设定等操作和item的列表化配置(比如可以后期借助item的overlay去表示prop化spawned item的预览图),利用spawned item 甚至可以更好的模拟动态技能、特效等等。
本次说一下御剑术——万剑归宗技能。
(0.000000, 0.000000, 0.000000, 添加MT如下
(try_begin),
(set_fixed_point_multiplier, 1000),
(get_player_agent_no, ":var_0"),
(agent_get_position, pos11, ":var_0"),
(copy_position, pos12, pos11),
(troop_set_slot, "trp_player", 317, "itm_swordskill0"), #简化了条件,设置飞剑的item id,实际可以调控一下,采取什么本命飞剑
(troop_get_slot, ":var_1", "trp_player", 317), #获取控制的飞剑item id
(scene_spawned_item_get_num_instances, ":var_2", ":var_1"), #获取spawned item 飞剑的物体数量,以便下方以循环的方式操作这一类物体进行prop类型的控制操作
(try_begin),
(key_is_down, key_left_mouse_button), #按住鼠标左键时,点击一下V键,使得周边以20度旋转一圈分别在240和480以玩家中心距离处各设置18把飞剑,共36把
(key_clicked, key_v),
(eq, ":var_2", 0),
(try_for_range, ":var_3", 0, 18),
(store_mul, ":var_4", ":var_3", 20),
(agent_get_position, pos12, ":var_0"),
(position_rotate_z, pos12, ":var_4"),
(position_move_y, pos12, -240),
(try_begin),
(neg|agent_slot_eq, ":var_0", 301, 1),
(position_move_z, pos12, 800),
(position_set_z_to_ground_level, pos12),
(else_try),
(position_move_z, pos12, 0),
(try_end),
(set_spawn_position, pos12),
(spawn_item, ":var_1", 0, 10), #生成所要御剑的飞剑,设置生命周期10s(生命周期随意,覆盖御剑技能施展周期即可,因为后面prune还要再强制缩小生命周期)
(try_end),
(try_for_range, ":var_3", 0, 18), #脑子偷懒,不数学计算了,两圈剑的生成复制了写的
(store_mul, ":var_4", ":var_3", 20),
(agent_get_position, pos12, ":var_0"),
(position_rotate_z, pos12, ":var_4"),
(position_move_y, pos12, -480),
(try_begin),
(neg|agent_slot_eq, ":var_0", 301, 1),
(position_move_z, pos12, 800),
(position_set_z_to_ground_level, pos12), #agentslot301是判断人物是否处于飞行状态,飞行则剑从地面处刷出,飞行则从脚底高度刷出
(else_try),
(position_move_z, pos12, 0),
(try_end),
(set_spawn_position, pos12),
(spawn_item, ":var_1", 0, 10),
(try_end),
(try_end), #生成飞剑段结束
(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),
(key_is_down, key_left_mouse_button),
(ge, ":var_2", 1), #没有按移动键时如果已经生成飞剑(即按了鼠标左键又点过V键),此时鼠标左键还按着不松手,开始执行御剑的运动周期环节
(try_for_range, ":var_5", 0, ":var_2"),
(scene_spawned_item_get_instance, ":var_6", ":var_1", ":var_5"), #循环spawned item物品去当prop控制的核心,get num数量后循环instance,类比过去正常prop的循环控制。
(prop_instance_get_position, pos13, ":var_6"),
(scene_prop_get_slot, ":var_7", ":var_6", 400),
(try_begin),
(is_between, ":var_7", 0, 300),
(store_add, ":var_8", ":var_7", 1),
(scene_prop_set_slot, ":var_6", 400, ":var_8"),
(try_end), #slot400以0-300为事件的执行周期
(scene_prop_slot_ge, ":var_6", 401, 0),
(try_begin),
(is_between, ":var_7", 0, 40),
(copy_position, pos14, pos13),
(store_mod, ":var_9", ":var_7", 2),
(eq, ":var_9", 0),
(position_move_z, pos14, 10),
(prop_instance_set_position, ":var_6", pos14), #slot400从0-40周期,剑从地面升起,剑身保持刷出时的角度,即平行水平面
(else_try),
(is_between, ":var_7", 40, 130),
(copy_position, pos14, pos13),
(store_mod, ":var_9", ":var_7", 1),
(eq, ":var_9", 0),
(position_rotate_x, pos14, -1),
(prop_instance_set_position, ":var_6", pos14), #slot400从40-130周期,剑旋转使得垂直于地面,剑朝下,即与人体平行。
(else_try),
(is_between, ":var_7", 130, 160),
(copy_position, pos14, pos13),
(store_mod, ":var_9", ":var_7", 1),
(eq, ":var_9", 0),
(position_rotate_y, pos14, 12),
(prop_instance_set_position, ":var_6", pos14), #slot400从130-160周期,各剑以自身为中心旋转
(else_try),
(is_between, ":var_7", 160, 210),
(copy_position, pos14, pos13),
(agent_get_look_position, pos15, ":var_0"),
(position_copy_rotation, pos14, pos15),
(prop_instance_animate_to_position, ":var_6", 14, 10), #slot400从160-210周期,各剑移动到与玩家御剑者的视角平行,但是平缓运动,因为目前剑与视角角度相差较多,避免突兀
(else_try),
(is_between, ":var_7", 210, 240),
(copy_position, pos14, pos13),
(store_mod, ":var_9", ":var_7", 1),
(eq, ":var_9", 0),
(position_rotate_x, pos14, 0),
(prop_instance_set_position, ":var_6", pos14), #slot400从210-240周期,本来是要再自身旋转下的,取消了参数没有转
(else_try),
(is_between, ":var_7", 240, 270),
(copy_position, pos14, pos13),
(agent_get_look_position, pos15, ":var_0"),
(position_copy_rotation, pos14, pos15),
(prop_instance_animate_to_position, ":var_6", 14, 10), #slot400从240-270周期,各剑移动到与玩家御剑者的视角平行,但是快速跟随运动,因为前阶段已经足够剑运动到玩家视角平行,现在是寻找目标阶段
(else_try),
(eq, ":var_7", 270),
(copy_position, pos14, pos13),
(agent_get_look_position, pos15, ":var_0"),
(position_copy_rotation, pos14, pos15),
(scene_prop_set_visibility, ":var_6", 0), #因为prune time 为0不是立即消失而是永生,所以隐身set_visibility是为了精细控制消失时机,prune是为了彻底抹除存在减少内存占用
(scene_prop_set_prune_time, ":var_6", 2), #slot400到270节点值,释放自身一样模型的missile,然后设置原有剑item prune生命周期为2s后消失。
(add_missile, ":var_0", 14, 60000, 0, 0, ":var_1", 0),
(scene_prop_set_slot, ":var_6", 401, -1),
(try_end),
(try_end),
(else_try),
(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),
(neg|key_is_down, key_left_mouse_button),
(ge, ":var_2", 1), #与上一套运行事件相悖,如果玩家任意方向移动或者松手了鼠标左键,则御飞的剑纷纷掉落,并且不能再启用导致技能CD,等生命周期都消失才可重新生成操作
(try_for_range, ":var_5", 0, ":var_2"),
(scene_spawned_item_get_instance, ":var_6", ":var_1", ":var_5"),
(prop_instance_get_position, pos13, ":var_6"),
(scene_prop_get_slot, ":var_7", ":var_6", 400),
(try_begin),
(is_between, ":var_7", 0, 400),
(store_add, ":var_8", ":var_7", 1),
(scene_prop_set_slot, ":var_6", 400, ":var_8"),
(try_end),
(try_begin),
(scene_prop_slot_ge, ":var_6", 401, 0),
(scene_prop_set_slot, ":var_6", 401, -1),
(try_end),
(scene_prop_slot_eq, ":var_6", 401, -1),
(try_begin),
(is_between, ":var_7", 0, 400),
(copy_position, pos14, pos13),
(position_copy_rotation, pos14, pos11),
(position_move_z, pos14, -10),
(position_get_distance_to_ground_level, ":var_10", pos14),
(ge, ":var_10", 10),
(prop_instance_set_position, ":var_6", pos14), #为了剑落地不陷下去
(try_begin),
(is_between, ":var_7", 0, 300),
(scene_prop_set_visibility, ":var_6", 1),
(try_end),
(else_try),
(ge, ":var_7", 400),
(scene_prop_set_visibility, ":var_6", 0),
(scene_prop_set_prune_time, ":var_6", 2),
(scene_prop_set_slot, ":var_6", 401, -2),
(try_end),
(try_end),
(try_end),
(try_end),
#########此外,技能是有cd的,cd即取决于所有剑的生命周期是否到头消失,只有场景内剑数量彻底为0,才可以继续这一套技能。
###########这样各种御剑术类似,控制item物体来各种运动,比如变成防御御剑,多把剑聚成剑环,或者挥舞剑时万剑伴随一起从内向外扩展一起旋转等等,并且不用考虑id复用问题,就像粒子系统一样刷了控制用完就消失
#############你甚至可以像李逍遥一样,御剑到面前,竖着飞到你面前,还能显示拾取物体的性质,又拿到手上,或者丢剑后,又控制到剑的物体id去prop般御剑飞行,等等,成为自由的剑仙。
|
|