NarraLeaf

Character

対話を扱う`Character`クラス。Sentence、命名、ダイアログボックスのアバターと立ち絵の紐付けを扱う

Characterはキャラクターの台詞を制御します。

注意: Character自体は舞台上のスプライトのレイアウトを制御しません。舞台上の表示要素にはImageを使用してください。ダイアログボックスのアバター(ADVテキストの隣に表示する小さな立ち絵)については、avatarportraitsを設定し、Avatarをレンダリングしてください。詳しくはDialogを参照してください。

パブリックメソッド

constructor

  • name: string | null - nullの場合はナレーターになります。ナレーターはダイアログボックスに名前を表示しません。
  • config?: DeepPartial<CharacterConfig> - CharacterConfig

[[Callable]]

character.sayはタグ関数として使用できます。

character`Hello, ${Word.color("Alice", "#f00")}!`, // "Alice"を赤色にした "Hello, Alice" を出力する

// は次と等価

character.say`Hello, ${Word.color("Alice", "#f00")}!`

注意: この短縮記法は、Webpackなどの一部のパッケージングツールではチェーンできません。

scene.action([
    character`sentence 1` `sentence 2`, // これはエラーになる
]);

チェーン可能なメソッド

say

オーバーロード1/4

1つの文を発言する。

character
    .say("Good morning!")
    .say("How are you?")

オーバーロード2/4

カスタムのSentenceオブジェクトを使用する。

character.say(
    new Sentence(character, [
        "Good morning, I am ",
        new Word("Alice", {color: "#f00"}), // 一部の単語には色を付けられる
    ])
) // "Alice"を赤色にした "Good morning, I am Alice" を出力する

注意: 台詞の名前はSentenceの名前と同じになります。

オーバーロード3/4

文字列とWordオブジェクトが混在する内容を使用する。

character.say([
    "Hello, ",
    new Word("Alice", {color: "#f00"}), // 一部の単語には色を付けられる
]) // "Alice"を赤色にした "Hello, Alice" を出力する

オーバーロード4/4

SentencePromptの短縮記法を使用する。

character.say`Hello, ${Word.color("Alice", "#f00")}!` // "Alice"を赤色にした "Hello, Alice" を出力する
  • texts: TemplateStringsArray - テンプレート文字列の配列
  • ...words: SingleWord[] - SingleWord

setName

キャラクターの名前を設定する。

character
    .setName("Alice (angry)")
    .say("What do you want?")
  • 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

立ち絵のリスト全体を置き換える(Image{ image, avatar }が混在してもよい)。

alice.setPortraits([
    { image: aliceBody, avatar: "/assets/alice/avatar-a.png" },
    bobPortraitImage,
]);
  • portraits: (Image | CharacterPortraitConfig)[]CharacterConfigを参照

apply

これはsayの特殊なエイリアスです。タグをそのままsayメソッドへ渡します。

注意:Webpackなどの一部のパッケージングツールを使う場合、このメソッドを次のようにチェーンすることはできません。

scene.action([
    character`sentence 1` `sentence 2`,
]);

ですが、その後に他のメソッドをチェーンすることはできます。

scene.action([
    character`sentence 1`.setName("Alice"),
]);

このメソッドは、キャラクターが1文だけ発言する場合にコードを短くします。

scene.action([
    character`Hello, ${Word.color("Alice", "#f00")}!`,
]);
  • texts: TemplateStringsArray - テンプレート文字列の配列
  • ...words: SingleWord[] - SingleWord

このページの目次