角色
负责对白语句与命名的 `Character` 类,含对话框头像与立绘绑定
Character 负责控制角色说出的台词
注意: Character 本身不驱动舞台立绘布局;舞台展示请使用 Image。对话框旁小头像(ADV 头像)通过 avatar / portraits 配置,并在 UI 中使用 Avatar — 详见 Dialog
公共方法
constructor
name: string | null- 传入null即为旁白,旁白在对话框中不显示名字config?: DeepPartial<CharacterConfig>- CharacterConfig
[[Callable]]
character.say 可以作为标签函数使用
character`Hello, ${Word.color("Alice", "#f00")}!`, // 将输出 "Hello, Alice",其中 "Alice" 为红色
// 等价于
character.say`Hello, ${Word.color("Alice", "#f00")}!`注意: 在使用 Webpack 等打包工具时,不能这样链式调用这个方法:
scene.action([ character`sentence 1` `sentence 2`, // 这会抛出一个错误 ]);
链式方法
say
重载 1 / 4
说一句话
character
.say("Good morning!")
.say("How are you?")content: string- 句子的内容config?: SentenceUserConfig- SentenceUserConfig
重载 2 / 4
使用自定义句子对象
character.say(
new Sentence(character, [
"早上好,我是 ",
new Word("Alice", {color: "#f00"}), // 一些单词可以着色
])
) // 将输出「早上好,我是 Alice」,其中 "Alice" 为红色注意: 台词名称将与句子的名称相同
content: Sentence- 参见 Sentence
重载 3 / 4
使用字符串和 Word 对象的混合内容
character.say([
"你好,",
new Word("艾丽斯", {color: "#f00"}), // 一些单词可以着色
]) // 将输出「你好,艾丽斯」,其中 "艾丽斯" 为红色content: SentencePrompt- 参见 SentencePromptconfig?: SentenceUserConfig- SentenceUserConfig
重载 4 / 4
使用 SentencePrompt 的简写形式
character.say`你好,${Word.color("艾丽斯", "#f00")}!` // 将输出「你好,艾丽斯」,其中 "艾丽斯" 为红色texts: TemplateStringsArray- 模板字符串数组...words: SingleWord[]- SingleWord
setName
设置角色的名称
character
.setName("艾丽斯(生气)")
.say("你想要什么?")name: string- 角色的名称
自 0.26.0 起,名字的改动会随存档保存。 在此之前 Character 从不序列化自身状态,因此没有任何存档记录过改名:在一位显示为「???」的说话人揭晓之后存档的玩家,读回来仍然是「???」——对话框里如此,回溯里也如此。现在开始新游戏或读档都会交还剧本所写的名字,而不是上一次游玩留下的那个
更早版本写出的存档不含角色条目,仍可照常读取,读回后保留剧本所写的名字。由于角色现在也会占用存档条目,而自动生成的元素 id 描述的是元素在动作树中的位置而非身份,需要恢复存档的应用应当通过 DevTools.setElementStaticId 给自己的角色阵容命名
setAvatar
设置或清除角色级对话框头像(旁白、以及无可见绑定立绘时的回退)
const alice = new Character("Alice")
.setAvatar("/assets/alice/avatar-default.png");
alice.setAvatar(false); // 关闭角色级头像avatar: DialogAvatar | false | null— 图片源、解析器、false关闭,或null清除
解析语义与优先级见 Dialog
addPortrait
将舞台 Image 绑定到该角色,并可选择为该绑定配置立绘级对话框头像(字符串或解析器)
alice.addPortrait(aliceBody, {
avatar: "/assets/alice/avatar-normal.png",
});image: Image— 舞台立绘config?: { avatar?: DialogAvatar }— 该绑定可选的头像覆盖
setPortraits
替换完整的 portraits 列表(可为裸 Image 或 { image, avatar })
alice.setPortraits([
{ image: aliceBody, avatar: "/assets/alice/avatar-a.png" },
bobPortraitImage,
]);portraits: (Image | CharacterPortraitConfig)[]— 见 CharacterConfig
apply
这是一个 say 的特殊别名
character`Hello, ${Word.color("Alice", "#f00")}!`;注意: 在使用 Webpack 等打包工具时,不能这样链式调用这个方法:
scene.action([ character`sentence 1` `sentence 2`, ]);但你可以像这样:
scene.action([ character`sentence 1`.setName("Alice"), ]);
这个方法在角色只说一句话时缩短了代码
scene.action([
character`Hello, ${Word.color("Alice", "#f00")}!`,
]);texts: TemplateStringsArray- 模板字符串数组...words: SingleWord[]- SingleWord