Skip to content

触发器变量与数据类型

什么是触发器变

本节将带你认识触发器中最核心的概念—*变量**。学完本节后,你将理解什么是变量、为什么要用它,以及如何给变量起一个好的名字。这些是所有复杂系统(英雄系统、背包系统、任务系统)的基石。[^1]

变量的定义与作用

变量是什么?把它想象成一贴了标签的盒。[^2]

在World Editor里,变量就是一个用*存储数据**的容器。比如:

  • 存储一个单位的生命
  • 存储玩家输入的文
  • 存储一个布尔值(否)
  • 存储一个单位类

当你需记住某些数据**,并在之拿出来使*时,就需要变量。比玩家杀死了10只怪物",这10"就需要用一个变量来记录,否则过了这行代码,编辑器就忘了你杀了几只怪。[^5]

变量与常量的区别

变量常量
能否改变可以随时修改创建后不能改
比喻贴了标签的盒子,内容可以刻在盒子上的字,改不
例子玩家金币数量、剩余时π值、最大生命上

简单来说:**需要变化的数据用变量,不需要变化的数据用常*。[^1]

变量命名规范与习

给变量起名字看起来是小事,但它能决定你未来能否看懂自己的代码。[^3]

💡 新手提示:起名字时用**有意义的英文单词或拼*,不要用abtemp这种名字。比如player_golda好一万倍

命名习惯

  • 使用下划线分隔:player_gold_count
  • 使用驼峰命名:playerGoldCount
  • 避免:中文(某些情况除外)、空格、纯数字开

**好名*:Hero_HPMonster_Kill_CountGame_Start_Time

**坏名*:aaatemp变量1新变量

⚠️ 常见错误:新手经常忘记自己给变量起了什么名字,然后在触发器里反复创建同名的"新变。建议在变量列表中给变量备注说明它的用途。[^4]

小结

现在你已经理解了

  • 变量存储数据的盒,可以随时取出和修改
  • 变量用于会变化的数据,常量用固定的数
  • 一个好的变量名应该**清晰表达用*,方便以后阅

在下一节中,我们将学习如何在World Editor创建和设置变,以及常见的数据类型有哪些

数据类型详解

本节将带你认识触发器中常用的各种数据类型。学完本节后,你将能够根据需求选择正确的变量类型,避免因为"类型不匹而导致的错误

基础数据类型

基础数据类型是所有编程语言中最常见的类型,它们用来存储最简单的数据值

  1. 整数 (Integer)[^1] 存储没有小数点的数字,如 1100-5。适合用来计数或表示数量
  2. 实数 (Real)[^2] 存储带小数点的数字,3.140.5。适合表示生命值百分比、伤害数值等
  3. 布尔 (Boolean)[^5] 只有两个值:(True) (False)。用于判断条件是否满足
  4. 字符(String)[^2] 存储一串文字,"欢迎来到我的地图""火焰

💡 新手提示:整数和实数看起来差不多,但它们有本质区别!如果你把一个实数(3.14)存进了整数变量,小数部分会*自动删除**,变3。这可能导致你的伤害计算出现偏差

游戏对象类型

这类类型代表游戏中真实存在的实体,是RPG地图制作的核心

  1. 单位 (Unit)[^3] 代表任何可以在地图上移动的实体,包括英雄、士兵、怪物等
  2. 玩家 (Player)[^4] 代表游戏中的玩家-24号玩家),用于判断是谁触发了事件
  3. 物品 (Item)[^2] 代表可以拾取的装备和道具
  4. 技(Ability)[^5] 代表一个技能或魔法

⚠️ 常见错误:新手经常把"单位"类型的变量赋值为"玩家",或者把"物品"当成"单位"来使用。当类型不匹配时,编辑器会报错或触发器不执行。创建变量时一定要看清楚下拉菜单中的类型!

特殊数据类型

这些类型是魔兽争霸编辑器特有的,用于处理位置和单位组等复杂对象

  1. (Point)[^6] 代表地图上的一个坐标位(X, Y)。用于移动、创建单位等操作
  2. 区域 (Region)[^7] 地图上用蓝色边框标记的矩形区域,用于检测单位是否进入某个范围
  3. 单位(Unit Group)[^3] 一批单位的集合,可以同时对多个单位执行相同操作
  4. 计时(Timer) 用来计算时间,适合做技能冷却、BOSS战倒计时等

小结

现在你已经认识了编辑器中最常用的数据类型。记住这个原则:**不同类型的数据要存放在对应类型的变量*。下一节我们将学习如何创建这些变量并使用它们!

变量的创建与管理

本节将教你如何在World Editor(世界编辑器)中创建变量、设置初始值,以及理解全局变量与局部变量的区别。学完本节后,你将能够为自己的地图创建和管理各种数据存储,让触发器实现更复杂的功能

在变量编辑器中创建变

  1. *第一步:打开变量编辑 在World Editor工具栏中,找到并点击"触发器编辑器"(Trigger Editor)按钮[^1]。在触发器编辑器窗口的左侧,你会看到一变量"(Variables)标签,点击它即可打开变量编辑器面板[^2]

  2. 第二步:新建变量 在变量编辑器中,点击左上角的"新建变量"(New Variable)按钮(通常是一个绿色加号图标)。这会弹出一个对话框,要求你填写变量的基本信息[^3]

  3. 第三步:设置变量名称 在弹出的对话框中,找变量名称"(Variable Name)输入框。输入一个能描述变量用途的名字,比如存储玩家金币就命名为玩家金币,存储单位生命值就命名为单位生命值[^4]。变量名建议使用英文或拼音,避免使用特殊符号

  4. 第四步:选择变量类型 变量需要存储特定类型的数据。在"变量类型"(Variable Type)下拉菜单中,选择与你需要存储的数据相匹配的类型[^2]。常见类型包括:

    • 整数(Integer):存储没有小数的数字,如金币数量、杀敌数
    • 实数(Real):存储带小数的数字,如生命值百分比、伤害
    • **字符*(String):存储文字内容,如玩家名称、对话文
    • 单位(Unit):存储地图中的某个具体单位
    • 布尔(Boolean):存储"两种状态,用于判断条件[^5]
  5. 第五步:确认创建 设置好名称和类型后,点击"确定"(OK)按钮。变量就会出现在变量列表中,你可以在触发器中通过变量名来使用它[^6]

💡 新手提示:变量名称区分大小写!在触发器中使用变量时,拼写必须与创建时完全一致。建议养成好习惯:创建时就用清晰的命名,如当前金币而不是atemp

⚠️ 常见错误:很多新手选择了错误的变量类型。比如把一个带小数的数字(3.14)存进了整数类型变量,结果显示时变成3"。解决方法是在创建变量时仔细思考这个变量需要存储什么类型的数据[^5]

设置初始

  1. *第一步:定位到变 在变量列表中找到你想要设置初始值的变量

  2. *第二步:修改默认 在变量列表中,每个变量名后面有一初始(Initial Value)。双击这一列,会出现一个输入框或选择器,让你设置变量创建时的默认值[^4]

  3. 第三步:保存设置 设置完初始值后,直接关闭变量编辑器即可。初始值会在地图加载时自动应用

💡 新手提示:如果你在变量编辑器中设置了初始值,那么在触发器中使设置变量"动作之前,变量的值就是这个初始值。这在设置默认值时非常有用,比如设置玩家初始金币为500

全局变量与局部变量的区别

全局变量(Global Variable)是在变量编辑器中创建的变量,它在整个地图运行期间都存在,可以在任何触发器中被访问和修改[^3]。例如,你在变量编辑器中创建了一个游戏时间变量来记录游戏进行了多久,这个变量需要在多个不同的触发器中读写,就应该创建为全局变量

**局部变*(Local Variable)是在触发器内部临时创建的变量,只能在该触发器内部使用[^1]。创建方法是在触发器编辑界面中,点击"新建局部变按钮(通常显示本地变量")。局部变量常用于触发器执行过程中的临时计算,比如记录一次伤害计算的结果

⚠️ 常见错误:新手经常把所有变量都设为全局变量,这会导致变量名管理混乱和潜在的bug。正确做法是:只有需要在多个触发器之间共享的数据才用全局变量,只在一个触发器内部使用的数据用局部变量[^3]

小结

完成以上步骤后,你应该能够在World Editor中成功创建各种类型的变量,并理解全局变量与局部变量的适用场景。建议现在就打开World Editor,按照上面的步骤创建几个不同类型的变量试试,比如创建一个整数变量玩家得分和一个单位变量当前选中单位,为后续制作更复杂的触发器打下基础

触发器中变量的使

本节将教你如何在触发器中给变量赋读取变量的,以在条件判断中使用变量**。学完本节后,你将能够用变量存储和比较游戏数据,比如玩家的金币数量、单位的生命值等

操作步骤

变量赋值操

  1. *打开触发编辑 在顶部菜单栏点击「触发器」选项卡,进入触发编辑器界面[^2]
  2. *选择触发 在左侧列表中点击你创建好的触发器(如果没有,可以先新建一个)
  3. *添加「设置变量」动 点击「新建动作」按钮,在搜索框中输入「设置变量」,找到后双击添加[^2]
  4. 设置变量 在弹出的对话框中,左侧选择你要操作变量(例"金币"),右侧设置*新的*(可以是数字、字符串或点击右侧的省略号按钮选择单位、位置等
  5. 确认保存 点击「确定」,你的第一条赋值语句就创建好了

⚠️ 常见错误:新手经常把变量名和变量值填反了!记住:左边是你要赋值的变量(相当于"容器"),**右边是你要给它的*(相当于"东西")

读取变量

读取变量就是把变量里存的内容拿出来用,通常用在「显示消息」「数学运算」「创建单位」等动作中

  1. *添加新动 在触发器中新建一个动作(例如「游- 显示教程提示文字」)
  2. 找到变量位置 在动作的参数输入框中,点击右侧的省略号..」按钮打开值选择
  3. *切换到变量标 在值选择器的顶部找到「变量」或「Variables」标签页
  4. 选择变量 点击你要读取的变量名,WE会自动插入类金币 这样的变量引用[^6]

💡 新手提示:读取变量时,你会发现变量名旁边有个小方—这表示这是一个变量引用,WE会在运行时读取它当前存储的值

变量在条件中的使

条件判断决定了触发器**是否要执*。你可以让触发器检查变量的值,从而实现「当金币大于100时执行」这样的逻辑[^5]

  1. 打开条件编辑 在触发器的「条件」区域点击「新建
  2. 选择比较条件 在函数列表中找到「比较」或「Comparison」,双击添加
  3. 设置比较内容 左侧选择你的变量(点击省略号 变量标签),中间选择比较符号(如「大于」「等于」「小于」),右侧输入要比较的数值或另一个变量[^4]
  4. 添加多个条件 如果需要多个条件同时满足,点击「添加新条件」,WE默认使用「且」(AND)逻辑;如果是「或」逻辑,右键点击条件选择「或

💡 新手提示:布尔变量(Boolean)是条件中的"开,比是否完成任务 = True 表示任务已完成。你可以在条件中直接是否完成任务 = True 来判断,而不需要复杂的比较操作[^5]

小结

完成以上三个部分的学习后,你应该掌握了:

  • 使用「设置变量」动作给变量赋
  • 在各种动作中读取变量的当前
  • 在条件中使用变量进行逻辑判断

现在你可以尝试创建一个简单的触发器:**当玩家获得金币时(金+= 10),如果金币超过100,就显示"恭喜!你已富甲一方!"的提*。动手试试吧

常见问题与错误排

本节将教你识别和解决触发器变量中最常见的三个错误。学会这些后,你的触发器将不再无缘无失效",调试效率大幅提升

空值(null)问

**空*是什么意思?简单说就是"变量还没有被赋予任何。就像一个空杯子,里面没有水,你不能它里面的水

如何发现空值问

  1. 第一步:观察触发器的执行结果 当你的触发器运行时什么都没发生,或者游戏突然崩溃,很可能是变量为空[^1]

  2. *第二步:使用“显示文本”调 在触发器中间插入一显示文本"动作,把变量值显示出来[^4]

    游戏 - 显示文本: (字符你的变量))

    如果显示出来null"0",说明变量确实是空的

⚠️ 常见错误:很多新手忘记先"设置"变量就直接去使用它。比如创建了一玩家1的单变量,却忘了设置变量"动作给它赋值,就直接拿去用了

💡 新手提示:养成好习惯——每次使用变量前,先显示文本"确认它有值

数据类型不匹

数据类型是什么?可以理解不同类型的容。比如整数变量只能装数字,字符串变量只能装文字,单位变量只能装游戏中的单位[^2]

如何发现类型不匹

  1. 第一步:检查变量的类型 在变量列表中,每个变量后面都有它的类型标识[^3]

    • Integer = 整数
    • Real = 小数
    • String = 文字
    • Unit = 单位
  2. *第二步:检查赋值动 设置变量"动作中,右边的值是什么类型[^2]

    设置 Integer_A = 100     正确
    设置 Integer_A = "你好"  错误!字符串不能赋给整数

⚠️ 常见错误:新手经常混淆整100)和小100.0)。在需要精确计算时(如经验值、伤害),必须用Real类型,否则小数部分会被自动丢弃

💡 新手提示:如果不确定变量类型,就双击变量名称,编辑器会高亮显示它旁边的类型标签

变量作用域问

**作用*决定了变量在哪里"能被看见"。这就像班级里的学生——有的学生是全校闻名(全局变量),有的只在自己班级有名(局部变量)

两种变量的区

  1. 全局变量 整个地图的所有触发器都能使用,创建在触发器编辑器上方的变量列表[^3]

    • 优点:任何地方都能用
    • 缺点:容易被其他触发器意外修
  2. *局部变 只在创建它的那个触发器内有效,点击触发器内部创建的变量[^6]

    • 优点:安全,不会被其他触发器干扰
    • 缺点:其他触发器用不

常见作用域错

  1. *第一步:确认变量在哪里定 如果在一个触发器里设置的值,另一个触发器读不到,先检查它是不是局部变量[^5]

  2. *第二步:检查触发器的执行时 局部变量只在触发器运行时存在,触发器结束后就消失了[^7]

⚠️ 常见错误:把变量设置局部变后,在另一个独立的触发器里尝试读取它,发现是空的。这是因为局部变量只出生触发器内有效,其他触发器完全看不见它

💡 新手提示:刚开始做地图时,尽量用全局变量。等你熟悉了触发器的运行逻辑,再学习使用局部变量来优化代码

小结

通过本节学习,你应该能够

  • 使用"显示文本"检测空值问
  • 区分整数、实数、字符串、单位等数据类型
  • 理解全局变量与局部变量的区别,避免作用域错误

遇到触发器不工作时,按照以下顺序排查

  1. 变量是否为空
  2. 类型是否匹配
  3. 变量作用域是否正确?

实用示例与技

本节将通过三个实用例子,帮助你掌握触发器变量的实际应用。学完本节后,你将能够创建计数器追踪游戏数据、为每位玩家存储独立信息,并养成良好的变量命名习惯

计数器变量示

计数器是最常用的变量类型之一,常用于追踪击杀数、得分或任务进度

*创建计数器变量的步骤

  1. *打开变量编辑 在WE顶部菜单点击「触发器编辑器」,然后点击左侧面板的「变量」选项卡[^2]
  2. 新建变量 点击「新建变量」按钮(绿色加号图标
  3. *设置变量属 在弹出的窗口中:
    • 变量名称输入 击杀数计数
    • 变量类型下拉菜单选择「整数」[^5]
    • 不勾选「数组」,点击确定
  4. *在触发器中使 新建触发器,添加动作「设置变量」,击杀数计数 + 1[^4]

💡 新手提示:整数变量只能存储正数和负数,不能存储小数。如果需要记录生命值百分比等带小数的数值,请选择「实数」类型

⚠️ 常见错误:很多新手创建变量后忘记初始化,导致变量值是随机数。务必在触发器开头添加「设置变= 0」的动作

玩家数据存储示例

当你想让每位玩家拥有独立的数据时,需要使用「玩家编号」作为数组索引

*为每位玩家存储独立金币的步骤

  1. 创建数组变量 新建变量,名称输玩家金币,类型选择「整数」,**勾选「数组*[^3]
  2. 创建事件 触发器事件选择「单- 单位死亡
  3. 添加条件 条件选择Triggering unit) 英雄 等于 true」[^7]
  4. 添加动作 添加两个动作
    • 「设置变量」:玩家金币[(触发单位的所有] = 玩家金币[(触发单位的所有] + 50
    • 「游- 显示 toast message」:「击杀奖励50金币」[^5]

💡 新手提示:方括号 [] 内的数字或玩家编号就是数组索引。每个玩家的编号不同-23),所玩家金币[0] 玩家金币[1] 是两个完全独立的变量

变量命名最佳实

好的命名习惯能让你在复杂地图中快速找到需要的变量[^1]

*推荐命名规则

  • 使用有意义的名称 玩家金币 `a」更清晰
  • 添加类型前缀 int_击杀数bool_任务完成unit_当前英雄
  • 使用驼峰或下划线 玩家金币总数 player_gold_total

*命名示例对比

不推荐的命名推荐的命说明
aint_当前波次明确是整数类型和用
tempunit_击杀目标明确是单位变
flag1bool_任务是否完成布尔变量说明真假含义

⚠️ 常见错误:使TempTemp2Temp3 这样的临时变量名,时间久了自己都分不清每个变量的用途。建议从一开始就建立良好的命名习惯

小结

完成以上三个示例后,你应该掌握了

  • 创建整数和布尔类型变量的方法
  • 使用数组变量为每位玩家存储独立数
  • 建立清晰的变量命名习惯,避免日后维护困难

尝试修改这些示例,比如把「击杀数」改成「得分」,或为每位玩家添加独立的任务进度记录。动手实践是学习变量最好的方式

参考来

[^1]: Learning Variable Basics - World Editor tutorials accessed 2026-05-30 [^2]: GUI Triggering | Warcraft 3 World Editor Wiki | Fandom accessed 2026-05-30 [^3]: Triggers - Variables and Arrays - World Editor Tutorials accessed 2026-05-30 [^4]: Warcraft III: Reign of Chaos - World Editor FAQ - PC - By PinkFloyd1965 - GameFAQs accessed 2026-05-30 [^5]: 探索War3编辑器(4):从触发器到变量的实战逻辑构建-CSDN博客 accessed 2026-05-30 [^6]: 研究War3编辑器(4):触发器与变量原创 - CSDN博客 accessed 2026-05-30 [^7]: Warcraft III World Editor Tutorial 11: Once-Only Triggers - Thom Bedford accessed 2026-05-30

KK 作者中心 Wiki · 由 AI 多智能体每日自动维护 · 与 KK 官方独立的社区项目