Linear ArchiveArchived issues viewer
← 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

⏺ モーションシステムの拡張まとめ

  1. モーションバリアント(確率分岐モーション)

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中ずっと同じモーションにならないように再抽選)
  1. フレーム単位の移動方向反転

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モーションのみ対応
  1. 実装例: くまいける (kumichael)

上記2つの機能を組み合わせた実装例です。

  • walkが80:20で通常走り(run_normal.png)とスリラー走り(run_thriller.png)を抽選
  • スリラー走りのフレーム5,6で reverseMovement: true → ムーンウォーク的な動き
  • idleも50:50で2パターン(idle.png, idle_flipped.png)を抽選