Skip to content
Copied!

キャラクターの状態遷移 ​

このページは,v1.0.1のbehavior.rs・terrestrial_behavior.rs・エンジンとOS側の実行処理を基に,通常のfreeモードの動きを整理したものです。設定項目の操作手順は使い方,数値は動作パラメーターを参照してください。

状態は「何をしているか」,サーフェスは「どこにいるか」です。同じWalkingでも,床かウィンドウの縁かで次の判断が変わります。状態の時間・足場の端・近くの移動先・乱数などを使って動作を選びます。

サーフェスの種類 ​

内部名意味
Desktopデスクトップの床
WindowTopウィンドウの上端
WindowWallウィンドウの側壁
WindowUpperCornerウィンドウ上部のコーナー
WindowBottomウィンドウ下端側の足場
Airborne足場に結び付いていない空中
WindowInterior水中物理向けの内部定義。通常のfreeモードの対象外

サーフェス間の遷移概略 ​

text
Falling -> LandingStandUp -> Observing -> Walking / SurfaceInteract
Walking -> JumpRunup -> Airborne -> WallEntry / LandingStandUp
WallEntry -> ClimbingUp -> CornerTransitionSide -> CornerTransitionFront
CornerTransitionFront -> CornerRest / Walking / ClimbingDown
ClimbingDown -> Walking (WindowBottom)

この図は主な流れを示すものです。休憩・走行・足場の消失・ユーザー操作などの分岐もあります。FallingとAirborneは毎回の状態判断だけで着地するのではなく,物理と到達検出から次の状態が決まります。

床・ウィンドウ天面の状態 ​

Falling ​

重力による落下です。足場へ着地すると,壁ならWallEntry,それ以外ならLandingStandUpへ進みます。足場の消失もこの状態へ移します。

Airborne ​

目標ウィンドウを持つ放物線ジャンプです。通常の落下と区別して,目標の位置を越えたか,目標が残っているかなどを実行側が判定します。

LandingStandUp ​

着地後の立ち上がりです。floor.standup_durationが経過するとObservingへ進みます。

Observing ​

着地後の観察です。時間が過ぎると,床では近くのウィンドウへの関心を判定し,その後は歩行またはのぞき込みを選びます。

SurfaceInteract ​

縁での短い動作を表します。のぞき込みはanimation="peek-down"です。時間が過ぎるとWalkingまたはTurningAroundへ進みます。旧資料のPeekDownは現在この状態で表します。

Walking ​

足場に沿って歩きます。床では壁への助走や走行へ,上端の縁では休憩・驚いた落下・コーナー移動などへ進みます。

Running ​

短時間の走行です。時間が過ぎるか縁へ着くとWalkingへ戻ります。床でジャンプ対象が見つかるとJumpRunupへ進む場合があります。

TurningAround ​

振り向く動作です。floor.turn_durationの後,floor.turn_walk_probに従ってWalkingまたはStandIdleへ進みます。

StandIdle ​

立った休憩です。口を開く小さな動きも持ちます。縁と通常の場所で,休憩終了後の選択が異なります。

SitIdle ​

座った休憩です。横向き・正面の切り替えがあり,時間後に横になる・立つ・歩くなどを選びます。

LieIdle ​

横になった休憩です。時間後に眠る・座る・歩くなどを選びます。

Sleeping ​

眠っている状態です。休憩時間が終わると,その場所に応じた起き方・移動へ進みます。

ジャンプの状態 ​

JumpRunup ​

ジャンプ前の助走です。jump.runup_durationの後にAirborneへ移ります。実際の速度・弾道・到達判定はエンジンとOS側の処理が担います。

ウィンドウ壁の状態 ​

WallEntry ​

壁に取り付いた姿勢を保持します。wall.entry_holdの後にClimbingUpへ進みます。

ClimbingUp ​

壁を登ります。上端へ着くとCornerTransitionSideへ進み,途中でWallPauseを選ぶ場合もあります。

ClimbingDown ​

壁を降ります。下端へ着くとWindowBottom上のWalkingへ移る処理へ進みます。途中でWallPauseを選ぶ場合もあります。

WallPause ​

壁で休憩します。時間が過ぎると,休憩前と同じ登り・降りへ戻ります。

コーナーの状態 ​

CornerTransitionSide ​

横向きのコーナー動作です。corner.side_corner_secsの後にCornerTransitionFrontへ進みます。

CornerTransitionFront ​

正面向きのコーナー動作です。登りなら休憩または上端の歩行へ,降りならClimbingDownへ進みます。

CornerRest ​

コーナーで座る・横になる休憩です。終了時に近くのウィンドウへの外出を判定し,それ以外は壁を降りるか上端を歩きます。

ユーザー操作と追加動作 ​

Grabbed ​

修飾キー付きドラッグでつかまれている状態です。離した後の足場選択は,ドロップ位置に基づいて実行側が決めます。

OneShot ​

素材で定義した追加アニメーションを一度再生します。完了後は保存していたreturn_toの状態へ戻ります。

アイドル状態チェーン ​

立つ → 座る → 横になる → 眠るという段階はありますが,必ず最後まで進む順序ではありません。通常の休憩場所と縁では選択方法が異なり,途中で歩き出す・振り向く・壁を降りることもあります。確率の一部は累積しきい値であり,それぞれ独立した確率ではありません。

イベントによる遷移 ​

出来事処理
足場が消えるFallingへ移る
落下から着地壁ならWallEntry,それ以外はLandingStandUp
ジャンプの目標へ到達目標と着地方法に応じて足場と状態を更新
ユーザーがつかむGrabbedへ移る
ユーザーが離す位置に応じて足場または落下へ戻る
OneShotが完了保存した状態へ戻る

発話のstartup・landing・hour_changeは,セリフのイベントです。これらと移動状態名を同じ種類の設定として扱わないでください。追加アニメーションの条件はbehavior.tomlに置き,足場判定や状態機械全体はエンジン側が管理します。