Linear ArchiveArchived issues viewer
← Back to list
INS-516

アルフレッドのバーストスキルが、オート発動時ヒットしてない問題

StatusDone
TeamInstansys
Assigneeyasuhisa.hiraga@instansys.co.jp
PriorityHigh
Created2026/03/13 02:09
Completed2026/03/13 03:04
Archived2026/03/21 02:28

Description

character_all の場合の自動発生スキル全般、味方にあたってない可能性がある。

アルフレッドの手動によるバーストスキルはヒットする。

手動とオート発動でなぜ処理が違うか

決定的な違いです。
                
  手動バースト (burst-skill.ts 297行目):                                                                                          
  setCharacters((currentCharacters) => {
    const projectiles = createWarpProjectilesForMultipleTargets({                                                                            
      ...
      characters: currentCharacters,  // ← setCharactersのupdater引数から最新値を取得                                                        
    });                                                     
    ...
    return currentCharacters;
  });

  オートバースト (character-entity.ts 1171行目):
  const characters = getCharacters();  // ← refs経由で取得(古い値の可能性)
  const projectiles = createWarpProjectilesForMultipleTargets({
    ...
    characters,
  });

  手動バーストは setCharacters のupdater関数の中で currentCharacters(Reactが保証する最新のstate)を使っています。一方、オートバーストは
  getCharacters()(refベースのgetter)を使っており、setScaledTimeout
  のコールバック内で呼ばれるため、refの更新タイミングとずれて空配列を返してしまいます。

  つまり処理の「意図」は同じですが、最新のcharacters配列をどこから取得するかの実装が違い、オート側だけタイミング問題を踏んでいます。修正はオ
  ート側も setCharacters のupdater経由で最新値を取得するようにすればOKです。

対象となるキャラクター情報の取得方法が違うため。

getCharacters()で取得できるキャラクター情報が0だった。

Comments (2)

yasuhisa.hiraga@instansys.co.jp2026/03/13 02:45
問題の本当の原因は、useBattleEntityRefs に [] を渡している(3349行目)ことです。
毎レンダリングで新しい [] 参照が生まれるため、
useEffectが毎回発火して refs.current.characters = [] で上書きしてしまい、
setCharacters updater内でセットした値が消えます。

ということなので、getCharacters()使ってる箇所全般的にダメそう

yasuhisa.hiraga@instansys.co.jp2026/03/13 02:54

character-entity.tsの useBattleEntityRefsを修正

  • 根本修正: useBattleEntityRefs([], ...) → useBattleEntityRefs(characters, ...) —

getCharacters()が常に最新のキャラクター配列を返すようになった