剧本命令参考
前置说明
一切命令的实现入口都写在StoryTeller和StoryNpc两个类里,没有细分更多的类。
剧本都是.txt类型,统一放在Assets/Story/目录下,可以建二级文件夹。
命令分为以下几种类型:
注释,以#开头
对话,格式是:角色名+冒号+空格+方括号+中文版默认文本,比如: rice: [talkid01]说话的具体内容。
剧本头,以-开头。虽然不是硬性要求,但最好把它们放在剧本的最开始,现在是用来控制每个npc的出现或消失的条件,格式是 -NPC名:出现条件 比如: -npc_dog:$meat_cnt>3 (之后也可以追加其他的宏观控制功能
标签,以*开头,跳转用的功能,很重要,请多使用。注意在一个剧本txt文件内不能使用同名的标签。
剧本命令,以@开头,剧本的大部分控制命令都属于这一类。
变量操作,以$开头,加一个带等号的算式。比如: $score=$score+5
写对话时,可以不写方括号[]中具体的talkId,只写一个方括号即可。然后执行菜单 Mytool->AddTextId 扫描所有剧本并根据标签名自动添加talkId。
把一个对象的tag设成pos,并且默认是active的状态,就会被认为是一个pos对象。为了能保证一直是active状态,推荐把pos放在GameMapLayer之外。
把StoryNpc组件添加到一个对象上,此对象就会被认为是npc,名字默认是它的对象名,也可以指定Npc Sp Name来为它改名(建议在重对象重名的情况下使用,平时不推荐用)。
npc、主角、pos是等同的,在命令里指定一个pos名时,除了会去找pos对象,也会去找npc和主角。主角的名固定是player。
命令中的数值属性,除了可以直接写数值,基本都支持写变量。比如 @pos player x=5 或者 @pos player x=$player_x 。另外也支持pos名属性的写法,比如: @pos player x=player_pos.x
很多命令都有一个wait属性,默认都是true。表示会自动等此条命令执行完毕,才继续执行后面的。如果不想等,可以写wait=false
把剧本文件拖到StoryNpc的Story参数中,把对应的标签名写在Run Tag参数中(不用写*号),把NPC的Trigger Type选成Check或Enter,当剧本头里写的条件满足时,就相应从剧本的对应标签行开始执行,直到遇到@end为止
基本命令
对话
有几种写法
角色名_立绘差分名: [对话翻译id]中文版默认文本 。 角色名需要参考\Assets\Resources\translation\ 下的翻译文本中的talkerName,必须在这里有配置,才能正常显示。立绘差分名对应Assets\Resources\image\face\ 目录下的立绘文件名。如果不写_立绘差分名,就不显示立绘。
x: [对话翻译id]中文版默认文本。 旁白文本,不显示姓名。
bub_npc名: [对话翻译id]中文版默认文本。 弹对话框气泡,不需要写名,但要写出是弹在哪个npc的对象头上。如果需要同时弹多个气泡,可以写bub2_npc名或bub3_npc名,这个会随bub_npc的气泡一同消失。如果希望气泡自动消失而不是点击消失,可以直接修改变量$bubble_t1 $bubble_t2 $bubble_t3,当它们大于0时就会使气泡变成自动消失。
对话中的特别指令用法:
在对话中加入单引号''的文本会被高亮。
想在对话中换行,需要手动写一个\n而不能真的换行。
直接写$变量名+空格,可以显示变量的值。
一些例子:
命令执行条件 cond:
在任何一个@命令的后面,接一个空格+cond:+条件,就能为此句命令限制上一个执行条件,当条件不满足时此句命令被跳过。经常被用来和@jump一起使用来控制跳转,代替if else或for循环
流程控制
跳转 @jump
跳转到某个标签
结束剧本 @end
立刻结束剧本,回到玩家控制
选择支 @sel @selstart
几行@sel 然后接一个@selstart,会开启选择支。在@sel后面的方括号里写选择支id,以及默认的中文版文本。玩家选择之后,会跳转到对应的 *sel_选择支id 标签上
注意1,菜单中的addTextId功能并不会给选择支的方括号里加上选择支id,所以需要写剧本时自己就定好选择支id
注意2,选择支之前最后说的一句话,并不会在出选择支时消失。比如下面例子里[before_sel10]那句话在弹出选择支时不会消失。如果希望它消失,可以加一个很短的等待命令@wait t=0.01
比如:
切换地图和地图层 @map @layer
@map 地图名 layer=层名 pos=pos对象名 blackin=切换前是否有黑屏渐入,默认是 blackout=切换后是否有黑屏渐出,默认否
@layer 层名 pos=pos对象名 blackin=切换前是否有黑屏渐入,默认是 blackout=切换后是否有黑屏渐出,默认否
注意,切换地图或层之后,都会执行一次层上挂的那个剧本。
显示标题画面 @title
临时用的,后续可能再完善
演出控制
等待@wait @w
@wait t=等待时间
音频 @bgm @xbgm @bgmv @bgs @xbgs @se @xse
事先在fmod中定义好,使用时不用写bgm_ se_ bgs_前缀
移动和改变位置与朝向 @move @movejump @pos @dir
只改变朝向可以用@dir
只改变位置和朝向时,可以用@pos,支持上面的d和face用法
控制移动使用@move,支持上面的所有用法,但位置分为初始位置opos/ox/oy,和终点位置pos/x/y两类。一般只需要指定时间、路程、速度中的任意两个值即可,如果只有路程或时间,也会按默认速度(4.5)来计算。速度区分指定v或vx/vy,常用的应该是vx的横移用法,比如下面例子的第四行。
这个移动同样也可以控制主角,但在物理生效的环境下并不能精准完美地控制主角,主角只能以他自己的速度在保证路程正确的情况下尽量准确地移动,好处是可以让主角在此情景下上下坡、有碰撞地运动。如果想让主角像npc一样被控制,需要加一个npclike=true属性
主角在移动时会自动改变动画,但npc并不会。所以请用动画控制的属性来决定它们的起始动画和停止动画。现在暂只支持trigger和int两种方式。
跳跃请用@movejump,比@move多一个h属性,而且此属性必须写,用来定义跳跃的高度。此高度具体是是指比起点和终点中偏高的那一点要高多少。对于npc,可能还需要指定fall动画,这样看起来更自然。
对于主角,在物理环境下,通常还未落地命令就会结束,所以不要依赖wait=true,最好自己手动写一个@wait t=估计的合适的时间
动画@anime
@anime npc名 tg=动画Trigger
此命令不含等待功能,如果需要等请用@wait手动控制等待
显示表情@emo
@emo npc名 n=表情名
表情名对应emo预设动画机上的trigger名,目前有:question surprise found silent happy awk angry thinkout
npc控制 @npccmd
以下这些命令都定义在了 npccmd 中,但为了使用方便,也给它们起了别名。通用语法是:
@npccmd npc名 cmd=命令名 参数=...
比如:
但为了使用方便,推荐使用下面的别名用法。
它们的功能都具体实现在了StoryNpc中,StoryNpc的NeceList就是为了这些功能准备的,可以把需要控制的对象拖进去。
画面控制
黑屏白屏单色屏 @solid
@solid 颜色名 t=时间
颜色定义在StoryTeller类的GetColor方法中,目前支持: black white red
如果想渐出黑屏,不需要写颜色名
@solid t=时间
闪屏 @flash
@flash 颜色名 t=时间 颜色定义在StoryTeller类的GetFlashColor方法中,目前支持: white red blue cyan
为了保护眼睛,闪烁色用的是半透明并且比较轻的颜色,所以和单色屏的颜色分开定义
图片遮罩 @frame
@frame show=是否显示 t=时间
目前只有一个当角色思考时使用的半透明黑色遮罩,如果有需要以后可以添加其他。
显示CG @cg @scg @scgdec @xcg
CG分为两类,一类是简单的图片cg,放在Assets\Resources\image\cg\目录下,一类是有很多零件差分或者有动画的预设cg,放在Assets\Resources\prefab\Cg\目录下,预设cg根结点需要有SpecialCg的组件
聚焦效果 @focus
震屏 @shake
@shake 震动名 这个使用了ProCamera2D的震动功能,需要在它那里定义震动,然后保存到Assets\Resources\system\目录下,不用写前缀shake_
相机控制 @cam
缘相关 @yuan @yuanwait @ywait
设置相关
切换主角 @player
@player tri
@player rice
@player skin
设置字符串 @str
@str [talkid]默认的中文字符串
这个设置的功能是为了和对话一样,设置中文版的字符串,其他语言的字符串会在各自的翻译文件中设置
名字遮罩 @namemask
@namemask 真名 mask=遮罩名
想取消遮罩显示真名的话,不写mask。
使用场景是,刚见面的npc还不知道它的姓名,知道了真名后再正常显示真名。那么事先在zh_cn.json里定义好他的真名和遮罩名
在实际使用中
系统
显示变量值 @print
@print $变量名
调试用的命令
最后更新于
这有帮助吗?