ビヘイビアと自動化
プラットフォーム上のワールドの多くは、ビヘイビアをまったく使っていません。それで問題ありません。クリエイターがビヘイビアを使うのは、AI に任せると一貫しない、ごく限られた仕事がいくつかあるときです。
トリガー、条件、効果の基本は ビヘイビア を見てください。
ビヘイビアが役に立つとき、立たないとき
新しいクリエイターがビヘイビアでいちばんやりがちな失敗は、作り込みすぎです。+ ビヘイビア ボタンを見て「全部自動化しよう」と考え、よく書けたエントリでもう足りていることを 30 個のビヘイビアで作り直してしまう。するとワールドが機械的に感じられるようになります。
ビヘイビアは正確さのためのものです。 AI のブレが体験を壊してしまう問題に向いています。
| 問題 | ビヘイビアで解決できる理由 |
|---|---|
| 「好感度がちょうど 75 になったらプレイヤーに知らせたい」 | AI は正確な数値を知らないが、エンジンは知っている |
| 「闘技場に入ったらバトル曲に切り替えたい」 | AI はオーディオの指示を半分くらいの確率で忘れる |
| 「3 ターンごとに空腹度を上げたい」 | AI は 2 ターン目にやったり、すっかり忘れたりする |
| 「HP が 0 になった瞬間に死亡画面を出したい」 | 一度でも AI に間違えられると困る |
エントリは物語のためのものです。 柔軟さや細かなニュアンスが大事な問題に向いています。
| 問題 | エントリで解決できる理由 |
|---|---|
| 「信頼が深まるにつれて NPC の話し方を変えたい」 | 条件ロアは AI に振る舞いの方針を渡す。決まった台本を押しつけない |
| 「プレイヤーがある場所を訪れたら伝承を明かしたい」 | キーワードロアは AI のコンテキストに自然に入っていく |
| 「ダンジョンに入ったら雰囲気を変えたい」 | エントリなら空気感を描写できる。ビヘイビアが AI に渡せるのは 1〜2 行だけ |
目安: ビヘイビアの AIに伝える 効果に物語の文章をひと段落書いているなら、たぶんエントリにするべきでした。ビヘイビアはスイッチやダイヤルのように働き、中身そのものはエントリが持ちます。
Sakura Season での使い分け
Sakura Season は、ビヘイビアとエントリがうまく組み合わさったいい例です。ビヘイビアは 9 個あり、どれも同じ基本の仕事をしています。好感度のしきい値の見張りです。
エントリ には、ヒロインそれぞれが好感度の段階ごとにどう振る舞うか(警戒している、打ち解けてくる、弱さを見せる)が書いてあります。ビヘイビア はぴったりのタイミングを受け持ちます。25 でお知らせ(「ヒナに気にかけてもらえたみたい……」)、50 で AI に新しい方針を渡して、近づいては離れる矛盾した態度を書かせる。75 では実績のお知らせを出し、告白のルートを始めます。
重い仕事はエントリがこなし、ビヘイビアは節目がちょうどいい瞬間に来るようにしています。
トリガーをくわしく
トリガー(発動するとき)は、エンジンがビヘイビアを いつ チェックするかを決めます。
よく使うもの
変数がしきい値を越える — いちばん人気のトリガーです。数値の変数がある線を越えた その瞬間 に発動します。
毎ターン「体力は 20 未満か」を確かめるのとは違います。このトリガーは、値が実際にしきい値をまたいだときに 1 回だけ 発動します。体力がもともと 10 で、10 のままなら、もう一度は発動しません。
設定するのは 3 つ。どの変数か、どちら向きか(上回る か 下回る)、そして値です。
Wandering Diary はこれを 3 つ使って地域の切り替えを作っています。distance 変数が 50 を越えると郡に入り、150 で山地、200 で省都。しきい値ごとに region 変数を新しい値にして、お知らせを出します。
変数が変化 — 変数が変わったときに発動します。見張る変数を 1 つ選んでもいいし、選ばずにどの変化でも発動するようにして、条件で絞り込むこともできます。
しきい値を越えたかどうかではなく、変数が特定の値になったことに反応したいときに使います。たとえば「現在地が変わるたびに、現在地が dark_forest かどうかを確かめ、そうなら不気味な曲を流す」。何が原因で変わったかに関係なく、値が変わるたびにビヘイビアが確認し直します。
Nターンごと — 決まった間隔で発動します。3 にすると 3、6、9、12…… ターン目に発動します。特定のターンに一度だけ動かしたいときは、N をそのターン数にして 最大発動回数 を 1 にします。
サバイバル系の仕組み(空腹度がじわじわ上がる)、ペース配分のイベント(20 ターン目に「時間がない」と警告する)、定期的なリマインダーに向いています。
毎ターン — プレイヤーと AI のやりとりが 1 往復するたびに発動します。使いすぎに注意してください。毎ターン動いて、毎ターン目に見える何かをするビヘイビアは、プレイヤーをうんざりさせます。ほとんどのターンを条件ではじくか、裏で黙って帳尻を合わせる用途にするのがいちばんです。
セッション開始 — 新しいゲームが始まったときに 1 回だけ発動します。初期化に向いています。初期値を入れる、歓迎のメッセージを出す、オープニング曲を流す、など。
プレイヤーがボタンを押した — プレイヤー画面 のボタンが ビヘイビアを動かす を実行したとき、または画面のコードが api.executeAction(id) を呼んだときに発動します。ボタンから値を渡すこともできます。ボタンから値を渡す を見てください。
あまり使わないもの
プレイヤーがキーワードを発言 — プレイヤーのメッセージに指定した言葉が含まれると発動します。マッチの方法はキーワードロアと同じです。単語単位の一致(任意)、正規表現(キーワードを /.../flags の形にしたとき)、セカンダリキーワードでの絞り込み(AND_ANY、AND_ALL、NOT_ANY、NOT_ALL)が使えます。
AIがキーワードを発言 — 上と同じですが、AI の返答の中を探します。AI が書いた内容に反応したいときに便利です。たとえば「AI が『戦闘開始』と書いたら曲を切り替える」。
数秒ごと — 現実の時間で発動します。ただし、プレイヤーがゲームを開いているあいだだけです。カウントダウンや、待たされてだんだんイライラしてくる NPC のように、プレイヤーが読んだり考えたりしているあいだに進んでほしいものに向いています。物語の進み方に合わせたいものには Nターンごと を使ってください。
条件:次の場合のみ
次の場合のみ は条件ロアと同じ条件の仕組みを使います。演算子も同じ 7 つ(eq、neq、gt、gte、lt、lte、contains。画面では = / ≠ / > / ≥ / < / ≤ / 含む)で、すべて満たす / いずれか満たす の組み合わせ方も同じです。演算子の一覧は 優れたエントリの書き方:状態駆動エントリ にあります。
条件を空にしておくと、トリガーが合うたびに毎回発動します。
トリガーは合ったのに条件が成り立たないときは、条件が合わないときに伝える に書いた文がプレイヤーに表示されます。これがないと何も起きず、プレイヤーはボタンがなぜ反応しないのかわかりません。
変数どうしを比べる
ふつうの条件は、変数を決まった数値や言葉と比べます。「好感度 ≥ 50」のように。でも右側には 定数 / 変数 の切り替えがあります。変数 にすると、いまの値どうしを比べる条件になります。
好感度 > 警戒心— 好感度がいま警戒心を上回っているあいだだけ発動金貨 >= 値段— 値段を直接書かずに「買えるか」を確かめる
しきい値そのものが決まっておらず、ゲームの進行につれて動くときに使います。同じ仕組みで、ほかに 2 つできることがあります。
- 左側には JSON 変数の中を ドットでたどったパス を書けます:
持ち物.金貨 >= 100 containsは部分文字列だけでなく 配列に含まれているか も判定します。フラグがリストで、その中に「王に会った」があれば、フラグ contains "王に会った"は真になります。
停止条件
停止条件 は「次の場合のみ」の逆です。停止条件のどれかが成り立っているあいだ、そのビヘイビアは発動しません。「X になるまで動かす」に使います。たとえば 5 ターンごとのリマインダーを、好感度が 100 になったら黙らせる。値がまた下がれば、ビヘイビアも再び動き出します。決まった回数で止めたいときは、代わりに 最大発動回数 を使います。
効果:ビヘイビアにできること
条件を通ると、エンジンは効果を上から順に実行します。1 つのビヘイビアに効果をいくつも入れられます。
変数を変更
変数を直接書き換えます。操作は 6 種類:設定、加算、減算、乗算、切り替え、追加。
値の指定方法は 3 つです。
- 定数 — 決まった数値や言葉。
- 変数 — 別の変数のいまの値。
生命 -= 力、スコア += コンボ、財布 += 日収のように使います。エンジンはビヘイビアが発動したその瞬間に読むので、計算にはいつも最新の値が使われます。 - ランダム — 範囲内の数、サイコロ、またはリストからひとつ選ぶ。リストから選ぶときは、直近に選んだものを避けるようにもできます。「今日の来客」のようなものに使えます。
変数の有効/無効
変数をオンにしたりオフにしたりします。オフのあいだ、その変数は AI のプロンプトからもプレイヤー画面からも外れ、AI が書き換えようとしても無視されます。ただし値は残るので、条件やビヘイビア、画面のコードからは読めます。AI に見えるタイミング を 手動 にした変数と組み合わせて使います。ダンジョンの中だけの戦利品、配信中だけ存在するスコア、など。変数 → AI に見えるタイミング を見てください。
シチュエーションの有効/無効
シチュエーション を開いたり閉じたりします。「有効」スイッチだけ に設定したシチュエーションは、これで動かします。
AIに伝える
プレイヤーには見えないひとことを、次のプロンプトにだけ AI へ渡します。物語の展開を強制したいときに便利です。「モンスターが現れた!ランダムな遭遇を描写して」。
それ以降もずっと効かせたい方針(Sakura Season で好感度 50 のときに渡す、近づいては離れる態度の指示など)は、待機ロアのエントリとして書き、ロアエントリを有効化 を使ってください。
ロアエントリを有効化 / ロアエントリを無効化
ロアエントリを開いたり閉じたりします。待機ロアを有効化するビヘイビアを使えば、隠していた設定をちょうどいいタイミングで明かせます。一度開いたエントリは、何かが閉じるまで開いたままです。
ビヘイビアの有効/無効
ほかのビヘイビアをオンにしたりオフにしたりします。連鎖はこれで作ります。ビヘイビア A はダンジョンに入ると発動し、ビヘイビア B(毎ターンのモンスター遭遇)をオンにする。ビヘイビア C はダンジョンを出ると発動し、B をオフにする。
通知を表示
プレイヤーにお知らせを出します。スタイルは 情報、成功、警告、エラー の 4 種類です。
ひとつの場面を解放
タイトル、ひとこと、画像の入った小さなカードをプレイヤーに渡します。リスト変数に集められるので、同じものが出るのは一度だけです。場面 を見てください。
音楽を再生 / 効果音を再生 / オーディオを停止
BGM を流す、効果音を一度鳴らす、曲を止める。トラックはオーディオの一覧から選びます。
コード
詳細 の中にあり、ゲームを開いているあいだ、カードの中で短い JavaScript を実行できます。山札のシャッフルのように、効果の行では表せないことに使います。コードのビヘイビア を見てください。
公開ワールドの実例
好感度のしきい値(Sakura Season)
定番の使い方です。Sakura Season には 3 人のヒロインに合わせて 9 個のビヘイビアがあり、どれも同じ 3 段階のパターンです。
好感度 25 — 控えめな情報のお知らせ。「ヒナに気にかけてもらえたみたい……」。あわせて story_phase を "daily" にする。一度きり(最大発動回数 1)。
好感度 50 — お知らせ「ヒナがあなたを特別な人として見はじめている……」。あわせて、近づいては離れる矛盾した態度を描く新しい方針を AI に渡し、story_phase を "deepening" にする。一度きり。
好感度 75 — クライマックスのきっかけ。お知らせ、告白シーンを用意するよう AI に渡す方針、story_phase を "climax" に。一度きり。
どのビヘイビアも 変数がしきい値を越える + 上回る を使い、ちょうど 1 回だけ発動して、プレイヤーへのお知らせ、AI への方針、段階を表す変数の更新を組み合わせています。いま同じものを作るなら、段階ごとの方針を待機ロアのエントリに書き、ロアエントリを有効化 で開きます。
地域の切り替え(Wandering Diary)
Wandering Diary は、プレイヤーが旅するにつれて増える distance 変数を持っています。変数がしきい値を越える のビヘイビア 3 つが、距離 50、150、200 で region 変数を切り替え、それぞれお知らせを出します。「ついに荒野を抜け、郡の領内に入った」「郡を越えると、果てしない山並みが目の前に広がる」「遠くに省都の輪郭が見えてきた」。
AI は距離を数える必要も、地域の境目を覚えておく必要もありません。
死亡のトリガー
Wandering Diary もサバイバル系のテンプレートも、同じパターンを使っています。体力が 1 を下回ったときの 変数がしきい値を越える と、エラー スタイルのお知らせです。ポイントは次のとおり。
- 優先度 100 — 死亡は何よりも先に判定する
- 最大発動回数 1 — 死亡のお知らせは一度だけ(0 を二度下回ることはないので、ほとんどのワールドはここまで気にしていません)
- ときどき AIに伝える と組み合わせて、キャラクターの最期を描写させる
ダンジョンでの連鎖
RPG 系のワールドでよく見るパターンです。ビヘイビア A がダンジョンに入ったことを見張り(キーワードのトリガー、または 変数が変化 + 条件)、ビヘイビアの有効/無効 でビヘイビア B(クールダウン付きの 毎ターン で起きるモンスター遭遇)をオンにします。3 つ目のビヘイビアがダンジョンを出たことを見張り、B をオフにします。
こうするとモンスターとの遭遇を特定の場所に限定でき、プレイヤーがダンジョンにいるかどうかを AI に追わせずにすみます。ダンジョンが シチュエーション なら、連鎖はいりません。ビヘイビア B をそのシチュエーションの中に置けば、シチュエーションが開いているあいだだけ発動します。
エンジンがビヘイビアを処理する流れ
何かが起きると(ターンが終わる、メッセージが届く、変数が変わる、ボタンが押される、時計が進む)、エンジンはすべてのビヘイビアを優先度の高い順に一度ずつ見ていきます。それぞれについて確かめるのは次のことです。有効か。所属するシチュエーションは開いているか。トリガーはこの出来事に合っているか。「次の場合のみ」の条件を満たすか。停止条件が成り立っていないか。クールダウン中ではないか。最大発動回数 に達していないか。発生する確率 を設定していれば、その抽選に当たったか。すべて通れば、効果が順に実行されます。変数を変える効果がさらに別のビヘイビアを動かすこともあり、無限ループを防ぐため 5 段階までで止まります。
プレイヤーに見えるのは結果だけです。お知らせ、曲の切り替え、変数の更新。ビヘイビアがなぜ発動したのか、なぜしなかったのかを知りたいときは、プレイテスト して このターン を確認してください。
発動のしかたを調整する
優先度、クールダウン、最大発動回数、確率は、ビヘイビアの設定の 詳細設定 にあります。
優先度
数値が大きいほど先に判定されます。複数のビヘイビアが同時に発動するとき、順番は優先度で決まります。
目安としては、死亡のチェックは 100、物語の節目は 50、雰囲気づくりの効果は 10〜20。厳密でなくてかまいません。大事なビヘイビアが、あったらうれしい程度のものより先に動けば十分です。
クールダウン
発動したあと、指定したターン数のあいだ休みます。クールダウン 5 の空腹警告なら、毎ターンうるさく言わず、警告と警告のあいだに少なくとも 5 ターン空けます。
最大発動回数
そのビヘイビアが通算で発動できる回数の上限です。最大発動回数 を 1 にすると一度きりのイベントになります。実績、初回だけのチュートリアル、物語の節目にぴったりです。
発生する確率(%)
本来発動するタイミングのうち、この割合でだけ発動します。毎回発動させたいなら 100 のままにします。「毎ターン 20% の確率で見知らぬ人がドアをノックする」のようなランダムイベントに向いています。
有効
ビヘイビアは最初から有効になっていますが、有効 をオフにして眠らせておき、ほかのビヘイビアが ビヘイビアの有効/無効 でオンにしたときだけ動くようにもできます。上で説明したダンジョンの連鎖は、これを土台にしています。
よくあるミス
エントリで足りるのにビヘイビアで作り込む。 AIに伝える の中に長い物語の文章を書いているなら、条件ロアのほうが合っているはずです。ビヘイビアが渡せる方針は 1〜2 文。エントリなら何段落ものコンテキストを渡せます。
変数がしきい値を越える のつもりで 変数が変化 を使う。 変数が変化 は変数が変わるたびに発動します。「体力が 20 を下回ったら知らせる」なら 変数がしきい値を越える を使ってください。またいだ瞬間に 1 回だけ発動します。変数が変化 + health < 20 の条件だと、体力が 20 未満のあいだ、変化するたびに毎回 発動してしまいます。たぶん望んでいる動きではないはずです。
頻繁に動くトリガーにクールダウンをつけ忘れる。 クールダウンのない 毎ターン のビヘイビアは、本当に毎ターン発動します。お知らせを出すなら、プレイヤーはお知らせ攻めにあいます。「プレイヤーは実際どれくらいの頻度でこれを見るべきか」をいつも考えてください。
3 個で足りるワールドに 30 個のビヘイビアを作る。 Sakura Season のビヘイビアは 9 個です。ヒロイン 3 人に、しきい値 3 つずつ。ほとんどのワールドはもっと少なくてすみ、人気作でもビヘイビアが 0 個のものはたくさんあります。まずエントリと変数から始めて、AI が特定のことで一貫しないと気づいたときだけビヘイビアを足してください。
しきい値を試していない。 ビヘイビアが health < 10 で発動する設定なのに、体力が実際にはそこまで下がらないなら(エントリで「体力が 30 未満なら負傷した様子を描写」と AI に指示しているなど)、いつまでたっても発動しません。しきい値がワールドの実際の動き方と合っているか確かめてください。
関連項目
- 優れたエントリの書き方 — 物語の変化には、ビヘイビアより条件ロアのほうが合うことが多い
- オーディオ設計 — ビヘイビアでのオーディオの効果と、AI の指示との使い分け
- ゲーム状態の設計 — ビヘイビアが反応する変数の設計
ルールの完全なスキーマと評価の流れ → World Spec:ルールとリアクション
