步骤一:准备单位及模型

1. 创建投射物单位

  • 打开物体编辑器(Object Editor),何通新建一个单位(如复制“马甲单位”)。过魔果
  • 设置模型为法球特效(如 `AbilitiesWeaponsFireBallFireBall.mdl`)。兽争实现
  • 调整缩放比例(Scale)为合适大小,霸编关闭碰撞和阴影。辑器技
  • 设置移动类型为“飞行”,法球移动速度设为0(通过触发器控制移动)。行效
  • 2. 准备法球技能

  • 添加一个被动技能(如“球体” Orb of Fire),何通用于标记触发攻击事件。过魔果
  • 步骤二:设置触发器

    触发器1:捕捉攻击事件并创建投射物

  • 事件
  • 事件:单位

  • 任意单位 发动攻击事件
  • 条件
  • 条件:触发单位 拥有法球技能(如 Orb of Fire)

  • 动作
  • vb

    动作:

  • 设置 attacker = 触发单位
  • 设置 target = 被攻击单位
  • 设置 startPoint = attacker 的兽争实现位置
  • 创建 1 个投射物单位(Fireball)在 startPoint
  • 设置 proj = 最后创建的单位
  • 设置 proj_height = 0 // 用于抛物线高度(可选)
  • 设置 proj_speed = 30 // 投射物移动速度
  • 设置 proj_maxDistance = 500 // 最大射程
  • 设置 proj_damage = 100 // 伤害值
  • 添加 proj 到投射物组
  • 自定义代码:call RemoveLocation(udg_startPoint) // 清除点泄漏
  • 触发器2:周期性移动投射物并检测命中

  • 事件
  • 事件:时间

  • 每 0.03 秒 游戏时间
  • 动作
  • vb

    动作:

  • 遍历投射物组中的每个 proj:
  • 如果 proj 存在:

    设置 currentPos = proj 的位置

    设置 targetPos = target 的位置

    // 计算朝向目标的移动方向

    设置 angle = currentPos 到 targetPos 的角度

    设置 moveX = proj_speed Cos(angle)

    设置 moveY = proj_speed Sin(angle)

    // 更新投射物位置

    自定义代码:call SetUnitX(udg_proj, GetUnitX(udg_proj) + udg_moveX)

    自定义代码:call SetUnitY(udg_proj, GetUnitY(udg_proj) + udg_moveY)

    // 检测是否命中

    如果 (proj 与 target 的距离 ≤ 50) 或 (target 已死亡):

  • 创建爆炸特效在 proj 的位置
  • 命令 dummy单位 对 target 造成 proj_damage 伤害
  • 从投射物组中移除 proj
  • 删除 proj
  • 否则:

    // 可选:抛物线效果(调整飞行高度)

    设置 proj_height = proj_height + 5

    自定义代码:call SetUnitFlyHeight(udg_proj, udg_proj_height, 0)

    // 清除泄漏

    自定义代码:call RemoveLocation(udg_currentPos)

    自定义代码:call RemoveLocation(udg_targetPos)

    高级优化

    1. 追踪移动目标

    每次更新投射物位置时重新获取目标当前位置,实现动态追踪。霸编

    2. 碰撞检测

    使用`单位组

  • 选取圆形范围内的辑器技单位`检测碰撞,实现范围伤害。法球
  • 3. 抛物线弹道

    通过`SetUnitFlyHeight`动态调整高度,行效配合重力模拟抛物线。何通

    4. 多投射物管理

    使用哈希表(Hashtable)存储每个投射物的属性(目标、速度、伤害等)。

    示例效果演示

  • 投射物飞行:火球从攻击者飞向目标,每秒更新位置。
  • 命中效果:命中后爆炸,造成伤害并播放特效。
  • 动态追踪:即使目标移动,火球也会调整方向直至命中。
  • 通过以上步骤,即可在魔兽争霸编辑器中实现自定义的法球飞行效果。根据需求调整投射物速度、模型和命中逻辑即可扩展更多玩法。