v
Skip to content

昼夜サイクル ​

時間がひとりでに進みます。3 ターンごとに朝、昼、夕方、夜と移り、また朝に戻ります。時間帯ごとに AI に渡す雰囲気と音楽が変わり、プレイヤーはいつでもいまの時間を確認できます。ビヘイビア、条件ロア、音楽のルールで作るので、コードは要りません。


これから作るもの ​

  • 4 つの時間帯:Morning → Noon → Evening → Night → Morning
  • 3 ターンごとに時間が進む:プレイヤーは何もしなくて大丈夫です
  • 雰囲気が変わる:時間帯ごとに、光、気温、人々の様子を書いたロアエントリがあり、AI に届くのはいまの時間帯のものだけです
  • 音楽が変わる:朝は鳥のさえずり、夜は虫の声。フェードで切り替わります
  • 時間が画面に出る:プレイヤーにいまの時間帯が見えます

しくみ ​

3 ターン目が終わる
  → ビヘイビア「Morning → Noon」が発動(Nターンごと:3、次の場合のみ:Time of day が Morning)
  → Time of day を Noon にして、時間が進んだことを AI に伝える
  → ロアエントリ「Noon」(条件:Time of day が Noon)が AI に届くようになり、「Morning」は届かなくなる
  → Noon の音楽ルールが当てはまり、Noon の曲がフェードイン
  → プレイヤー画面の Time of day が Noon になる

時間が進むときに変わるのは、変数ひとつだけです。ロアと音楽はそれぞれこの変数を見ているので、勝手についてきます。


ステップバイステップ ​

ステップ1:変数を作る ​

カードの下にある 追加できるもの で + 変数 を押します。

項目値
名前Time of day
型文字
初期値Morning
ビヘイビアルールいまの時間帯。Morning、Noon、Evening、Night のどれか。光、天気、人々の様子をこれに合わせて描写する。

AI での扱い を開き、AI アクセス を AI は読み取り専用 にします。時計を進めるのはビヘイビアで、AI は読むだけです。

プレイヤー画面に表示 を押すと、チャット画面に時間帯が表示されます。

新しいゲームは必ず 初期値 から始まるので、サイクルは毎回 Morning から始まります。リセット用のビヘイビアは要りません。


ステップ2:時間帯ごとのエントリを 4 つ書く ​

時間帯ごとにロアエントリを 1 つずつ追加します。次に、変数 Time of day を各エントリの上にドラッグし、できた線をクリックして条件を「Time of day = Morning」のように設定します(ほかの時間帯も同様)。エントリは条件ロアのブロックに移り、条件を満たしているあいだだけ AI に届くようになります。

Morning ​

[Time of day: Morning]
早朝。場面を描写するときは、次の雰囲気を取り入れること:
- 東からやわらかな光が差し、空気は澄んでひんやりしている
- 草や花びらの露が光を受けてきらめく
- 枝で小鳥がさえずり、遠くで雄鶏が鳴く
- 人々は起き出したばかりで、店が一軒ずつ開いていく
- 落ち着いていて、希望を感じる雰囲気

Noon ​

[Time of day: Noon]
真昼。場面を描写するときは、次の雰囲気を取り入れること:
- 太陽が真上にあり、地面が白くまぶしい
- 空気がこもり、遠くの景色が陽炎でゆらぐ
- たいていの人は日陰で休んでいて、通りは朝より静か
- 酒場や食堂は一番のにぎわいで、料理の匂いが漂ってくる
- のんびりしていて、うだるような雰囲気

Evening ​

[Time of day: Evening]
夕暮れ。場面を描写するときは、次の雰囲気を取り入れること:
- 沈む夕日が空をオレンジと紫に染め、雲のふちが金色に光る
- 建物や木から長い影が伸びる
- 鳥がねぐらへ帰り、屋根の上に炊事の煙が上がる
- 人々は仕事を終えて家路につき、子どもたちが通りで追いかけっこをしている
- あたたかく、少しもの寂しい雰囲気

Night ​

[Time of day: Night]
深夜。場面を描写するときは、次の雰囲気を取り入れること:
- 自然の明かりは月と星だけで、何もかもが銀色に見える
- ほとんどの窓は暗く、ところどころでろうそくがまだ灯っている
- 涼しい風に乗って、虫やカエルの声が聞こえる
- 通りにはほとんど人がいない。松明を持った夜警が通り過ぎる
- 暗闇には何かが潜んでいるかもしれない。獣か、盗賊か、もっと悪いものか
- 静かで、気の抜けない雰囲気

4 つが一度に AI に届くと、AI はどれに従えばいいかわかりません。条件を付けておけば、届くのはいまの時間帯のものだけになります。


ステップ3:時間を進めるビヘイビアを作る ​

サイクルの一段階ごとにビヘイビアを 1 つ作ります。追加できるもの で + ビヘイビア を押します。

Morning → Noon ​

部分設定
発動するときNターンごと:3
次の場合のみTime of day が Morning
効果変数を変更:Time of day を Noon に
AIに伝える:時間が朝から昼に進んだ。次の描写で、その変化を自然に表すこと。

Noon → Evening、Evening → Night、Night → Morning ​

値の組み合わせを次の時間帯に変えて、同じように作ります。

ビヘイビア次の場合のみ変数を変更AIに伝える
Noon → EveningTime of day が NoonTime of day を Evening に時間が昼から夕方に進んだ。
Evening → NightTime of day が EveningTime of day を Night に時間が夕方から夜に進んだ。
Night → MorningTime of day が NightTime of day を Morning に夜が明け、新しい一日が始まった。

4 つとも同じターン(3、6、9……)に発動しようとしますが、次の場合のみ に書いた時間帯がそれぞれ違います。エンジンは 4 つすべてを、どれかが動く前の時間で判定するので、毎回ちょうど 1 つだけが発動します。

AIに伝える は、AI に一行だけ伝えるもので、効くのは次の返信だけです。続けて効くのはロアエントリのほうで、この一行は移り変わりを自然に読ませるためのものです。


ステップ4(任意):時間帯ごとの音楽 ​

オーディオ ページに BGM トラックを 4 つ追加します(カードにまだオーディオがなければ、追加できるもの で + オーディオ を押します)。Morning、Noon、Evening、Night の 4 つで、どれも ループ再生 をオン、フェードイン(秒) と フェードアウト(秒) は 2 秒にします。

次に BGM設定 → 条件付きBGM → 条件付きルールを追加 を、時間帯ごとに 1 回ずつ行います。

項目値
トリガー変数条件:Time of day が Morning
再生Morning
フェードイン(秒) / フェードアウト(秒)3 / 3
前のBGMを停止オン

時間帯が変わると、古いルールが当てはまらなくなり、新しいルールが自分の曲を流し始めます。片方がフェードアウトしながら、もう片方がフェードインします。ルールについて詳しくはオーディオデザインガイドを見てください。


ステップ5(任意):画面に時計を出す ​

ステップ1の プレイヤー画面に表示 だけで、チャット画面に時間帯は出ます。もっと雰囲気を出したいときは、プレイヤー画面を使います。

  • 画面全体 にある 冒険HUD テンプレートは、現在地、日数と時間帯、ゲージ 2 本を表示します。日数と時間帯の変数は自前で追加されるので、それを消して文字をあなたの Time of day に向けるか、自分の変数の代わりにテンプレートの変数を使います
  • または、会話のページに 文字 の部品を追加し、変数の値を挿入… で {Time of day} を表示します。太陽と月の 画像 の部品も足し、それぞれ 表示するタイミング → 変数が条件を満たすとき を設定します(月なら Time of day と等しい Night)

ステップ6:プレイテスト ​

上部バーの プレイ を押します。

  1. 最初の 2 ターンは Morning です
  2. 3 ターン目のあと Noon になり、AI の次の返信に暑さや真上の太陽が出てきます
  3. さらに 3 ターンで Evening、もう 3 ターンで Night。音楽を追加していれば、そのたびに曲が変わります
  4. さらに 3 ターンで、また Morning に戻ります

プレイテストの右側の このターン で、どのビヘイビアが動いたか、AI がどのロアエントリを受け取ったかを確認できます。

うまくいかないときは:

症状よくある原因直し方
時間がまったく進まないビヘイビアの 次の場合のみ の値が 初期値 と一致していない変数と条件の Morning を同じつづりにします
一度に 2 つ先の時間帯まで進む2 つのビヘイビアの 次の場合のみ が同じ値になっているビヘイビアごとに違う時間帯を判定させます
雰囲気が変わらないエントリの条件が間違っているか、常に送るブロックに残っている各エントリの条件と AI に渡すタイミング を確認します
AI が自分で時間を変えるAI アクセス が AI が読み書き可能 のままAI は読み取り専用 にします
2 曲が同時に鳴る前のBGMを停止 がオフ時間帯ごとのルールでオンにします

バリエーション:時間帯ごとに長さを変える ​

Nターンごと の間隔はいつも同じです。昼を長く、夜を短くしたいとき(たとえば昼の各時間帯は 4 ターン、夜は 2 ターン)は、ターンを自分で数えます。

  1. 数値の変数 Turns this period を追加します。初期値は 0、AI アクセス は エンジン専用(AI に非表示) にします
  2. ビヘイビアを追加します:毎ターン、効果は 変数を変更 で Turns this period に 1 を足す
  3. 時間を進める 4 つのビヘイビアの 発動するとき を、Turns this period の 変数がしきい値を越える に変えます。上回る の値は、Morning → Noon、Noon → Evening、Evening → Night では 3、Night → Morning では 1 です。それぞれの 次の場合のみ は Time of day のまま残します
  4. 4 つそれぞれに 変数を変更 で Turns this period を 0 にする効果を足し、新しい時間帯でカウントがやり直しになるようにします

ターンではなく現実の時間で進める ​

数秒ごと は、プレイヤーがゲームを開いているあいだ、時計に合わせて発動します。4 つのビヘイビアに 300 を入れると、プレイヤーが文字を打っていてもいなくても、プレイ時間 20 分で 1 日が過ぎます。


カスタムコードの方法:最後のメッセージに時間バッジを付ける ​

インターフェースを自分で書くなら、インターフェースのコードで変数を読みます。ここまでの設定はそのままで構いません。

パネル → フロントエンドコード → index.tsx を開き、デフォルトの return <Chat /> を置き換えます。

tsx
export default function MyWorld() {
  const api = useYumina();
  const timeOfDay = String(api.variables["Time of day"] || "Morning");

  const timeConfig = {
    "Morning": { icon: "☀️", color: "#fbbf24", bg: "rgba(251,191,36,0.15)" },
    "Noon":    { icon: "🌤️", color: "#f59e0b", bg: "rgba(245,158,11,0.15)" },
    "Evening": { icon: "🌅", color: "#f97316", bg: "rgba(249,115,22,0.15)" },
    "Night":   { icon: "🌙", color: "#818cf8", bg: "rgba(129,140,248,0.15)" },
  };
  const current = timeConfig[timeOfDay] || timeConfig["Morning"];
  const msgs = api.messages || [];

  return (
    <Chat renderBubble={(msg) => {
      const isLastMsg = msg.messageIndex === msgs.length - 1;
      return (
        <div>
          <div
            style={{ color: "#e2e8f0", lineHeight: 1.7 }}
            dangerouslySetInnerHTML={{ __html: msg.contentHtml }}
          />

          {isLastMsg && (
            <div style={{
              display: "inline-flex",
              alignItems: "center",
              gap: "6px",
              marginTop: "12px",
              padding: "4px 12px",
              background: current.bg,
              border: `1px solid ${current.color}33`,
              borderRadius: "999px",
              fontSize: "13px",
              color: current.color,
              fontWeight: "600",
            }}>
              <span style={{ fontSize: "16px" }}>{current.icon}</span>
              <span>{timeOfDay}</span>
            </div>
          )}
        </div>
      );
    }} />
  );
}

コードの中身:

  • api.variables["Time of day"] で、変数を名前で読みます
  • timeConfig で、時間帯ごとのアイコンと色を決めています
  • isLastMsg があるので、バッジは最後のメッセージにだけ付きます。このチェックを外すと、すべてのメッセージに時間が付きます

パネル → フロントエンドコード のファイル横の状態が、緑の OK になっていれば大丈夫です。


クイックリファレンス ​

やりたいことやり方
N ターンごとに何かする発動するとき:Nターンごと
現実の時間で何かする発動するとき:数秒ごと
いまの値で分岐するトリガーが同じで 次の場合のみ が違うビヘイビアを複数作る
時間帯ごとの雰囲気を AI に渡す時間帯ごとにロアエントリを 1 つ作り、Time of day の条件を付ける
時間帯で音楽を変える条件付きBGM、変数条件、前のBGMを停止 をオン
時間が進んだことを AI に伝える効果:AIに伝える(次の返信だけ)
AI に時間を変えさせないAI アクセス:AI は読み取り専用
時間を表示するプレイヤー画面に表示、文字の部品、またはインターフェースのコード

これはレシピ #9 です

同じ組み立て方(ビヘイビアが一定のリズムで動かす変数と、それについてくるロアと音楽)は、天気、季節、NPC の機嫌にも使えます。プレイヤー画面の 一日の行動 テンプレートを使うと、日数、時間帯、一日に数回の行動が追加されます。育成や経営のカードに向いています。