← 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()が常に最新のキャラクター配列を返すようになった