-
Notifications
You must be signed in to change notification settings - Fork 90
Expand file tree
/
Copy pathSkillDsl.txt
More file actions
478 lines (396 loc) · 17.9 KB
/
SkillDsl.txt
File metadata and controls
478 lines (396 loc) · 17.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
=======================================================================================================* 注意 *===========================================================================================
DSL里每个section里面的trigger的执行是倒序执行的,在加载后,各trigger会按开始时间从大到小降序排序,然后执行时从最后一个往前依次执行(即开始时间从小到大的顺序执行)。排序采用稳定的冒泡排序,需要注意的是
由于是倒序执行,相同开始时间的触发器,执行顺序与在dsl里书写的顺序是相反的,相同开始时间的触发器执行时需要保持顺序的要按执行序的倒序书写!!!
=======================================================================================================********===========================================================================================
* 技能系统的流程与几个概念
基于DSL的技能系统里的一次技能释放,指的是攻击方发起一个技能(Skill),在某个时刻对目标产生瞬间影响(Impact),并有可能产生一个持续的影响(Buff)的过程。
这里涉及到的Skill、Impact与Buff,三者都使用dsl来描述,Skill表里的type列用来区分这三种类型。
Skill:在攻击方对象上实现流程,一般如果攻击方死亡就会消失。
Impact:在受击方对象上实现流程,目前主要有2类,一个是子弹技能,一个是受击技能。与Skill拆分开是为了表达攻击方完成Skill后不用等受击方的处理完成即可开始做其它事情(典型的开枪打出子弹后,立即可以做其它事情)。
Buff:在受击方对象上实现流程,主要表述对受击方的持续性的影响。
一个对象上同时只能激活一个Skill,同时可以激活多个Impact与Buff。
对不同的技能,完整过程可能有如下几种情形:
Skill -> Impact (受击)
Skill -> Impact (受击) -> Buff
Skill -> Impact (子弹) -> Impact (受击)
Skill -> Impact (子弹) -> Impact (受击) -> Buff
* 相关技能配表
Skill的dsl里面内嵌了emitskill(不是子弹技能不需要)与hitskill的情形,技能配表里的impact填0,如果是受击后要加buff的则填buff ID。
Skill的dsl里面没有内嵌emitskill(不是子弹技能不需要)与hitskill的情形,技能配表里的impact填的是单独配置的受击技能ID(独立的子弹技能的ID在dsl里的emiteffect里指定),如果受击后要加buff,
则在受击技能ID的配置行里的impact里填buff ID。
* 技能dsl说明
skill(id) // id对应技能配置表skill中的dslSkillId
{
section(time) //技能阶段,可为多段, time为该段执行时间
{
};
onmessage("oncollide") //处理事件
{
};
oninterrupt() //技能在被打断时会运行该段逻辑
{
};
onstop() //技能结束时(包括打断导致的结束)会运行该段逻辑
{
};
emitskill //嵌入的子弹技能
{
section(time)
{
track(bone,0);
};
};
hitskill //嵌入的受击技能
{
section(time)
{
animation(hit);
selfeffect(hitEffect,1000,hit,0);
damage(0);
};
};
};
* 接口说明
1. curvemove(triggertime, [movetime, speedx, speedy, speedz, accelx, accely, accelz]+[, isForRoundMove])
功能:曲线移动,在triggertime时间开始移动,每个阶段速度speed, 加速度accel,时间movetime
Example:
curvemove(300, 0.05, 0, 0, 0, 0, 0, 160, 0.05, 0, 0, 8, 0, 0, 320);
2. consume([starttime])
功能:触发技能消耗计算
参数:
- starttime 开始时间
3. animation(anim_name [,start_time[,normalized_anim_start_time]])
{
speed(0.6[, is_effect_skill_time]); //is_effect_skill_time同setanimspeed
playmode(mode[, time]); //mode=0为play, 其它为crossfade, time为过渡时间,默认300
}
功能:在start_time开始播放动画anim_name, 可以指定其它详细参数(可选)
参数:
Example:
animation("jianshi_pugong_01")
{
playmode(1, 50);
};
4. playsound(starttime, name, audio_source, audio_remain_time, audio_clip, is_need_collide) {
audiogroup(clip, [clip...]);
position(vector3(pos), is_attach);
bone(bone_name, is_attach);
volume(volume_value);
};
功能:播放声音, 默认挂到人物(0, 0, 0)点播放
参数:
- name 当前播放声音的标识,在stopsound接口中可通过指定该标识停止该声音,
有相同的name的AudioSource存在时,会忽略audio_source及其它配置参数,使用已存在的声源,
人物身上默认的AudioSource的name为"default"
- audio_source 声源的prefab,在该prefab上必须挂接AudioSource组件并配置好相应参数,
如果为""或无法创建该声源时使用人物身上默认的AudioSource, 其它参数将被忽略
- audio_remain_time 存活时间
- audio_clip 声音文件
- audiogroup 声音文件组,播放声音时会随机播放包括audio_clip在内的声音
- is_need_collide 是否需要碰撞才播放,默认false
- position 在当前玩家指定的位置播放声音
- pos 相对于玩家的位置
- is_attach 是否挂接
- bone 将声源放到挂接点播放
- bone_name 挂点名字
- is_attach 是否挂接
- volume 播放声音的大小
- volume_value 声音大小的值(0.0-1.0)
Example:
playsound(100, "test", "Sound/Swordman/SkillSound", 1000, "Sound/Swordman/JianShi_Step_01", false);
5. stopsound(startime, name);
功能:停止声音
参数:
- name 声音标识
Example
stopsound(200, "test");
6. selfeffect(effect_path,delete_time,attach_bone[,start_time[,is_attach]]);
或
selfeffect(effect_path,delete_time,attach_bone[,start_time[,is_attach]])
{
transform(vector3(0,1,0)[,eular(0,0,0)[,vector3(1,1,1)]]);
};
或
targeteffect(effect_path,delete_time,attach_bone[,start_time[,is_attach]]);
或
targeteffect(effect_path,delete_time,attach_bone[,start_time[,is_attach]])
{
transform(vector3(0,1,0)[,eular(0,0,0)[,vector3(1,1,1)]]);
};
功能:在人物挂点增加并播放特效
参数:
- effect_path 特效prefab
- delete_time 特效存在时间
- attach_bone 挂接点
- is_attach 是否挂接, 默认为true
Example:
selfeffect("Hero_FX/1_Swordman/1_Hero_JianShi_PuGong2_01",533,"Bone004",300, true);
7. sceneeffect(effect_path,delete_time[,vector3(x,y,z)[,start_time[,eular(rx,ry,rz)[,vector3(sx,sy,sz)[,is_rotate_relative_user]]]]]);
功能:在场景内增加并播放特效
参数:
- effect_path 物效名
- delete_time 持续时间
- vector3(x,y,z) 相对于玩家的位置
- start_time 开始时间
- eular(rx,ry,rz) 旋转角度
- vector3(sx, sy, sz) 缩放
- is_rotate_relative_user 旋转角度是否相对于玩家, 默认false
Example:
sceneeffect("Hero_FX/1_Swordman/1_Hero_JianShi_PuGong1_01",300,vector3(0,1,0));
8. rotate(startime, remain_time, vector3(rotate_speed));
功能:旋转物体
参数:
- remain_time 持续时间
- rotate_speed 旋转角/s
Example
rotate(0, 500, vector3(720, 0, 0));
9. stopeffect(starttime);
功能:停止当前所有的特效
参数:
Example
10. facetotarget(starttime, remain_time[, rotate_speed[, selecttype]]);
功能:面向目标, 没有目标时不作方向调整
参数:
- remain_time 持续时间,不管时间长短,至少保证会执行一次
- rotate_speed 旋转速度(度/s), 缺省或0时将直接朝向当前目标
- selecttype 选择目标的类型,指定此参数时如果当前技能没有目标,会按类型选择一个目标
minhp -- 选择血最少的目标
maxdist -- 选择距离最远的目标
randenemy -- 选择随机敌人
randfriend -- 选择随机友方
Example
- facetotarget(10, 200, 360);
11. storepos(starttime);
功能:保存当前玩家的位置
参数:
Example:
storepos(20)
12. restorepos(starttime);
功能:将玩家的位置设置为前一个storecurpos保存的位置,只有在一个技能中的storecurpos有效
参数:
Example:
restorepos(8000);
13. timescale(starttime, scale[, duration])
功能:减慢世界速度
参数:
- scale 减慢比例, 1为正常速度
- duration 持续时间, 注意:实际时间受到scale的影响
Example:
timescale(0, 0.2, 500);
14. fadecolor(starttime,remaintime,"path","shadername",startcolor,changecolor[,changetime]);
功能:渐变拥有特定shader的material的颜色(颜色会曝)
参数:
- remaintime 持续时间
- path 要查找的GameObject的相对路径
- shadername shader的名字
- startcolor开始的颜色(格式Color(r,g,b,a))
- changecolor在remaintime内每秒变化的颜色
- changetime颜色变化的时间
Example:
fadecolor(0,1000,"1_TieQuan_01","AlphaBlendDisorderWithLight",color(0,0,0,0),color(100,100,100,100));
15. damage([start_time]);
功能:产生技能伤害。
16. charge(duration,velocity,stopAtTarget[,vector3(x,y,z)[,start_time[, isForRoundMove]]]);
功能:冲锋。
参数:
- duration 冲锋时间
- velocity 冲锋速度
- stopAtTarget 是否冲到目标停止(0--调整 1--调整速度 2--调整时间)
- vector3(x,y,z) 目标点的调整偏移(沿到目标的方向)
- start_time 触发器开始工作时间(相对于所在section)
17. jump(duration,height,velocity,stopAtTarget[,vector3(x,y,z)[,start_time[, isForRoundMove]]]);
功能:跳。
参数:
- duration 跳的时间
- height 跳的高度
- velocity 跳的水平速度
- stopAtTarget 是否跳到目标停止(0--调整 1--调整速度 2--调整时间)
- vector3(x,y,z) 目标点的调整偏移(沿到目标的方向)
- start_time 触发器开始工作时间(相对于所在section)
18. bornfinish([tart_time]);
功能:通知逻辑层出生过程结束。
19. deadfinish([start_time]);
功能:通知逻辑层死亡过程结束。
20. animationspeed(start_time, speed [, is_effect_skill_time]);
功能:设置动画的速度
参数:
- is_effect_skill_time 是否影响技能时间, 默认false, 影响技能时间会影响技能的移动、特效振屏等效果
Example:
animationspeed(200, 0.1, true);
21. transform(startime, bone, vector3(position), eular(rotate), relaitve_type,
is_attach[, is_use_terrain_height=false][,randomrotate = Vector3.zero]);
功能:设置当前技能的施法者的位置
参数:
- bone 挂接点,不使用挂接点时其值为" " 或""
- position 位置
- rotate 旋转
- relative_type 以上三个值的相对目标,可以为以下几个值:
"RelativeSelf" 相对于自己
"RelativeTarget" 相对于目标, 当没有目标时不位移
"RelativeWorld" 世界坐标
- is_attach 是否挂接
- is_use_terrain_height 是否使用地形高度, 默认false
- randomrotate 随机旋转的范围(在每个坐标轴上的值都是以零为中心,正负差的绝对值为此范围)
Example
transform(0, " ", vector3(0, 0, 3), eular(0, 0, 0), "RelativeSelf", false, true, vector3(10, 10, 10));
22. emiteffect(effect_path,emitBone,emit_impact,emit_speed[,start_time[,is_external_impact]]);
或
emiteffect(effect_path,emitBone,emit_impact,emit_speed[,start_time[,is_external_impact]])
{
transform(vector3(0,1,0)[,eular(0,0,0)[,vector3(1,1,1)]]);
};
功能:发出一个飞向目标的特效,这个只是一个发起触发器,实际逻辑在emitskill里或者外部配表的emit skill处理。
is_external_impact为true表明emit_impact为外部配表的impact,否则为内嵌的emitskill。
transform的3个参数分别是位置偏移,发射轨迹偏转方向与控制点位置参数
-位置偏移指明特效相对于施法者朝向的位置
-默认子弹是沿初始位置到目标的直线运动,发射轨迹偏转方向用以与控制点位置参数一起确定控制点的位置,一般只使用第二个欧拉角即可(俯视情形,正数为顺时针转动角,负数为逆时针转动角)。
-控制点位置参数是一个缩放矢量,范围为vector3(0,0,0)~vector3(2,2,2),默认为vector3(1,1,1),此时控制点在距目标距离中点处。
控制点的计算方法:假设初始位置距目标S,则控制点在初始位置朝目标按偏转方向“S/2*缩放矢量”距离处。
23. track(trackBone[,start_time[,duration[,not_move]]]);
功能:将特效移向主角,这一触发器用在预定义技能emit_skill里用来移动子弹特效并触发受击。
24. replaceshaderandfadecolor(starttime,remaintime,"shadername",startcolor,changecolor[,changetime]);
功能:改变shader并渐变material的颜色
参数:
- remaintime 持续时间
- shadername 替换的shader的名字
- startcolor开始的颜色(格式color(r,g,b,a))
- changecolor在changetime内每秒变化的颜色
- changetime颜色变化的时间
25. adjustsectionduration(type[,startTime[,deltaTime]]);
功能:调整当前section的持续时间。
参数:
- type anim/impact,按动画或impact时间调整
- startTime 在某个时刻后进行调整(调整后此trigger即结束)
- deltaTime 额外增加的时间
26. impact(start_time[,centerx,centery,centerz,relativeToTarget]);
功能:按当前技能表格配置加Impact
Example:
impact(200);
27. keepsectionforbuff(interval[, starttime[, deltatime]]);
功能:以interval时间间隔调整当前section持续时间为buff的持续时间(用于支持多个buff叠加导致持续时间动态变化)
Example:
keepsectionforbuff(100,0);
28. params([startTime])
{
int(name,value);
long(name,value);
float(name,value);
double(name,value);
string(name,value);
...
};
功能:定义技能参数,可以多次定义(此时startTime应不同且在间隔里会有使用参数的地方)。
29. addstate(state[,starttime]);
功能:给当前impact对象添加状态,可以是"invincible","fixedposition","silence","sleep","hidden"
30. removestate(state[,starttime]);
功能:给当前impact对象添加状态,可以是"invincible","fixedposition","silence","sleep","hidden",""
31. aoeimpact(start_time, center_x, center_y, center_z, relativeToTarget);
功能:按指定偏移位置与配表的范围对指定目标产生aoe impact
32. aoeemiteffect(effect_path,emit_bone,center_x,center_y,center_z,relativeToTarget,emit_impact,emit_speed[,start_time[,is_external_impact]]);
或
aoeemiteffect(effect_path,emit_bone,center_x,center_y,center_z,relativeToTarget,emit_impact,emit_speed[,start_time[,is_external_impact]])
{
transform(vector3(0,1,0)[,eular(0,0,0)[,vector3(1,1,1)]]);
};
功能:按指定偏移位置与配表的范围对指定目标发送轨迹impact
功能:发出一个飞向目标的特效,这个只是一个发起触发器,实际逻辑在emitskill里或者外部配表的emit skill处理。
is_external_impact为true表明emit_impact为外部配表的impact,否则为内嵌的emitskill。
transform的3个参数分别是位置偏移,发射轨迹偏转方向与控制点位置参数
-位置偏移指明特效相对于施法者朝向的位置
-默认子弹是沿初始位置到目标的直线运动,发射轨迹偏转方向用以与控制点位置参数一起确定控制点的位置,一般只使用第二个欧拉角即可(俯视情形,正数为顺时针转动角,负数为逆时针转动角)。
-控制点位置参数是一个缩放矢量,范围为vector3(0,0,0)~vector3(2,2,2),默认为vector3(1,1,1),此时控制点在距目标距离中点处。
控制点的计算方法:假设初始位置距目标S,则控制点在初始位置朝目标按偏转方向“S/2*缩放矢量”距离处。
33. stopsection([start_time])[if(type)];
功能:如果指定条件满足则终止当前section。目前只支持type为"shield",表示如果盾消失则停止。没有if部分则在start_time终止当前section(此种情形一般用在onmessage里面)。
34. periodicallyimpact(starttime,centerx,centery,centerz,relativeToTarget,duration,interval);
功能:按指定的周期产生impact
35. sendstorymessage(start_time,msg,arg1,arg2,arg3,...);
功能:发送剧情消息
36. sendgfxmessage(start_time,objname,msg,arg1,arg2,arg3,...);
功能:基于gameobject名字发送gfx脚本调用消息
37. sendgfxmessagewithtag(start_time,tag,msg,arg1,arg2,arg3,...);
功能:基于gameobject Tag发送gfx脚本调用消息
38. publishgfxevent(start_time,event,group,arg1,arg2,arg3,...);
功能:发送gfx订阅事件,触发订阅了此event的函数
39. addshield([start_time]);
功能:给目标加盾(根据配表数值)
40. removeshield([start_time]);
功能:移除目标的盾
41. selecttarget(type[,start_time]);
功能:按指定类别选择目标
type可为:
minhp -- 选择血最少的目标
maxdist -- 选择距离最远的目标
randenemy -- 选择随机敌人
randfriend -- 选择随机友方
42. lockframe(startime, lock_speed, locktime[,
after_lock_anim_speed, restore_time[, is_effect_skill_time,
after_lock_effect_speed, after_lock_move_speed,
after_lock_skill_speed]])
{
keyframe(time, value, inTangent, outTangent);
...
};
功能:定帧
参数:
- lock_speed 定帧后动画速度
- locktime 定帧时间长度, 该时间不受技能时间影响
- after_lock_anim_speed 定帧后动画速度
- after_lock_effect_speed 定帧后特效速度
- after_lock_move_speed 定帧移动速度缩放
- after_lock_skill_speed 定帧后技能速度
- restore_time 定帧后从lock_speed速度变为after_lock_anim_speed的时间,该时间不受技能时间影响
- is_effect_skill_time 同setanimspeed
- keyframe 曲线关键帧,可以通过以下方式生成
1. 在随意一个场景中创建一个空的GameObject, 挂接PrintCurve脚本
2. 在编辑中编辑曲线
3. 点击“拷贝到剪贴板”, 粘贴到技能配置文件中,注意:如果
文件中出现科学计数法如1.221E-7或其他数字表达方式,需要手动改为一般的数字
4. 编辑完后删除1中创建的GameObject
Example:
lockframe(700, 0, 100, 1, 50, true, 1, 1, 1);
43. periodicallyaoeimpact(start_time, center_x, center_y, center_z, relativeToTarget, duration, interval);
周期性的产生范围impact。
44. chainaoeimpact(start_time, center_x, center_y, center_z, relativeToTarget, duration, interval);
链式范围impact,首次确定目标,之后依次对目标产生impact。
45. enablemoveagent(true_or_false[,start_time]);
允许或禁用移动功能。(技能要控制角色位置时需要先禁用移动功能)
46. teleport(starttime, offset_x, offset_y, offset_z);
瞬移到目标所在位置。
47. hiteffect(hitEffect, hitEffectBone, hitEffectStartTime, hitEffectDeleteTime, hitAnim, hitAnimTime, hitDelayTime);
描述技能的受击特效等信息。
48. cleartargets(starttime);
清空当前技能选择过的目标的记录。
49. colliderimpact(start_time, center_x, center_y, center_z, duration[, finishOnCollide, singleHit]);
在指定时间段持续对当前对象经过的路径(aoe半径读表)上碰到的敌人产生impact。
50. follow(start_time, offset_x, offset_y, offset_z, duration);
在一段时间内跟随目标(放到指定的偏移位置)。
51. animationparameter([start_time])
{
float(name,val); //val为浮点数
int(name,val); //val为整数
bool(name,val); //val为true或false
trigger(name,val); //val为true或false
};
在指定时间修改动画控制器的参数,name为控制器配置里指定的名字。
52. keeptarget([starttime[,remaintime]]);
or
keeptarget([starttime[,remaintime]]){
aoecenter(x,y,z,relativeToTarget);
};
在每个Tick保证目标不会进入死亡过程。
53. animationevent(anim_name_or_tag, normalized_fire_event_time, message[, start_time]);
or
animationevent(anim_name_or_tag, normalized_fire_event_time, message[, start_time]);
{
int(name,value);
long(name,value);
float(name,value);
double(name,value);
string(name,value);
...
};
指定动画事件,当动画播放到指定时间(0~1的normalized time)时发送指定的消息,可选设置技能的变量。
54. useimpact(impactid,[starttime[,is_external_impact]])[if(type)];
指定后续触发的impactid,默认是内嵌的hitskill的id,is_external_impact为true指明使用外部配表的hitskill。
if部分为可选,用以指明设置/修改参数的条件,目前支持block,用于指明触发格档时的受击impact。