← Back to list
INS-549
エネミー実装:くまいける
StatusDone
TeamInstansys
Assigneeyasuhisa.hiraga@instansys.co.jp
PriorityUrgent
Created2026/03/20 07:03
Completed2026/05/06 08:14
Archived2026/05/14 03:52
Description
- walkモーションを2つ
- run_normal.png
- run_thriller.png(低確率)
- run_thriller.pngの6,7フレーム再生中は移動を一時停止する
- やってみて、根本的な改変とか時間かかる様なら、ノーマルのみ
- 攻撃は通常攻撃のみ
Comments (1)
yasuhisa.hiraga@instansys.co.jp2026/04/01 03:15
⏺ モーションシステムの拡張まとめ
- モーションバリアント(確率分岐モーション)
MotionData に variants と defaultWeight を追加。idle/walkなどの状態に入るたびに、重みベースで再生するモーションを抽選します。
型の変更 (packages/shared/src/motion.ts)
type MotionData = {
// ...既存フィールド
variants?: { motion: MotionData; weight: number }[];
defaultWeight?: number; // 省略時100
};
使い方 (マスタデータ)
const walkMotion: MotionData = {
...walkMotionA,
defaultWeight: 50,
variants: [
{ motion: walkMotionB, weight: 50 },
],
};
- variants を指定しなければ従来通り動作(既存エネミーへの影響なし)
- weightは比率なので合計100にする必要はない(7:3 でも 70:30 でも同じ)
- variants配列に複数登録可能
抽選タイミング
- idle/walk状態に遷移するとき
- walkモーションが1ループ完了したとき(walk中ずっと同じモーションにならないように再抽選)
- フレーム単位の移動方向反転
FrameState に reverseMovement を追加。特定フレームの再生中だけ移動方向を反転できます。
型の変更 (packages/shared/src/motion.ts)
type FrameState = {
// ...既存フィールド
reverseMovement?: boolean;
};
使い方
frames: [
{ frameIndex: 0, frameDuration: 12 },
{ frameIndex: 1, frameDuration: 12 },
{ frameIndex: 5, frameDuration: 12, reverseMovement: true }, // このフレーム中は後退
{ frameIndex: 6, frameDuration: 12, reverseMovement: true },
],
- 向き(facingDirection)は変わらず、移動方向だけ反転する
- 現在エネミーのwalkモーションのみ対応
- 実装例: くまいける (kumichael)
上記2つの機能を組み合わせた実装例です。
- walkが80:20で通常走り(run_normal.png)とスリラー走り(run_thriller.png)を抽選
- スリラー走りのフレーム5,6で reverseMovement: true → ムーンウォーク的な動き
- idleも50:50で2パターン(idle.png, idle_flipped.png)を抽選