Linear ArchiveArchived issues viewer
← Back to list
INS-838

やられボイスが デバッグ バトルで 鳴らない問題解析

StatusDone
TeamInstansys
Assigneeasuki.uehata@instansys.co.jp
PriorityLow
Created2026/06/10 12:14
Completed2026/06/10 12:58
Archived2026/06/18 04:26

Description

代表からの指示による。解析ログをここに記す INS-837に付随して。

デバッグモード アカデミー最初のバトルで、やられボイスがならない。

ロード状況 指定URLの プリロードまでは成功

音がならないので、Volumeチェック

Comments (9)

asuki.uehata@instansys.co.jp2026/06/10 12:17

プリロード成功 safari console スニペット実行結果。

使用スニペット 3種類

⭐️ iOS 実機 Safari consoleコマンドで 起動時に戻すリセット

Capacitor.Plugins.CapacitorUpdater.reset()

⭐️メモリ/バッファでもってるAudio一覧

Object.keys(window.__pixiSound._sounds)

⭐️Volumeチェック

({

battleVoice: window.__sm._battleVoiceVolume,

master: window.__sm._masterVolume,

ctx: window.__pixiSound.context.audioContext.state,

})

結果、ログ抜粋

"https://utsaqkhxqllqkazxzhow.supabase.co/storage/v1/object/public/entity-states/audios/94c86703-52c7-43fc-b154-15ec6fbcec12/4f71a57f-95c9-4f…"

14

"https://utsaqkhxqllqkazxzhow.supabase.co/storage/v1/object/public/entity-states/audios/ee1d4658-625f-4b2c-8e13-e068a7d7da10/ebf0a298-4882-4f…"

asuki.uehata@instansys.co.jp2026/06/10 12:20

がロードされていた。 でも聞こえない。

システムの方のVolume も問題なさそう。プリロードもされてはいそう。 再生がされていないか、どうか。。

``` ⚡️ TO JS {"status":200,"data":[{"result":{"data":{"json":{"characters":[{"totalExp":28050,"level":34,"updatedAt":"2026-06-10T11:47:56.816Z","playerId":"2EEfjRQFnhcojWCWPgCQw6RoD253","totalAwakenings":0,"temporaryExp":0,"combinedTotalExp":28050,"id":19,"intimacyPoin ⚡️ [log] - [Battle] preload enemy defeat voices, count= 2 ⚡️ [log] - [shortSound.preload] alias=https://utsaqkhxqllqkazxzhow.supabase.co/storage/v1/object/public/entity-states/audios/94c86703-52c7-43fc-b154-15ec6fbcec12/4f71a57f-95c9-4fc6-811c-246dcd643508.m4a existed=false ⚡️ [log] - [shortSound.preload] alias=https://utsaqkhxqllqkazxzhow.supabase.co/storage/v1/object/public/entity-states/audios/ee1d4658-625f-4b2c-8e13-e068a7d7da10/ebf0a298-4882-4f59-9080-0f479e4da088.m4a existed=false

asuki.uehata@instansys.co.jp2026/06/10 12:20

[enemy-defeat-voice] play のログが出ていない = playEnemyDefeatVoice が呼ばれていません。

preload は2件きちんと走っているのに、やられた瞬間の play 呼出経路に到達していないということ

のようだ

asuki.uehata@instansys.co.jp2026/06/10 12:34

やられボイスは、 ボイスの再生までは、検証している実装ではなさそう。主にグラフィック面での実装がメインだったようだ。ということで私の方で、やられボイスの再生問題は解消していく

asuki.uehata@instansys.co.jp2026/06/10 12:34

shortSound用の新しいAPIで、やられボイスをならす。

役割分担(X 案の最終形)

ファイル責務状態
Battle.tsxpreload と release(メモリ管理)✅ Step 2 で実装済み、変更なし
Enemy.tsxplay 発火(やられ時のトリガー)⏳ Step 3a で新規追加

つまり:

  • preload は Battle.tsx で発火する(現状のまま)
    • バトル開始時に spawn 情報から全敵の voice URL を集めて shortSound.preload を一括呼出
    • バトル離脱時の useEffect cleanup で shortSound.release 一括呼出
    • これが「集中管理」の意味
  • play は Enemy.tsx で発火する(Step 3a 新規)
    • 各 Enemy.tsx が自分の live.state を監視し、"dead" への transition 時に playEnemyDefeatVoice を呼ぶ
    • 内部で shortSound.play(url) が走る
    • 呼出時にはもう preload 済み(バトル開始時に Battle.tsx が事前ロード済み)なので即座に鳴る

なぜこう分けるか

  • preload は「バトル全体で一括」が効率的(ロード猶予を最大化、ロジック集中)
  • play は「個別の敵の死亡」で発火するので Enemy.tsx 内が自然(生死状態を持っているのは Enemy.tsx)

両者の責務を分離した方が見通しが良い

asuki.uehata@instansys.co.jp2026/06/10 12:38

INS-836 Enemy.tsx で dead transition 時にやられボイス発火

playEnemyDefeatVoice の呼出が AnimationDebug.tsx のプレビュー用しか

存在しておらず、バトル中の Enemy.tsx から発火されていなかった (機能未実装)。

Enemy.tsx に useRef + useEffect で enemy.state の "dead" 立ち上がりを

検知する仕組みを追加し、shortSound 経由でやられボイスを発火する。

manualControl 経由の手動 "dead" 切替 (AnimationDebug) は既に

AnimationDebug 側で playEnemyDefeatVoice を呼んでいるため、

!isManualControl ガードで二重発火を回避。

asuki.uehata@instansys.co.jp2026/06/10 12:45

私が今回APIを実装する前から、ヤンキー やられボイス ならない問題があったが、新しいAPIを実装し、なおかつ、そのAPIで、音がちゃんとなるようになり、バグも改善した。

[Log] [enemy-defeat-voice] play (index-Dk_n8-Sf.js, line 16) "https://utsaqkhxqllqkazxzhow.supabase.co/storage/v1/object/public/entity-states/audios/94c86703-52c7-43fc-b154-15ec6fbcec12/4f71a57f-95c9-4fc6-811c-246dcd643508.m4a" [Log] [shortSound.play] sound.play alias=https://utsaqkhxqllqkazxzhow.supabase.co/storage/v1/object/public/entity-states/audios/94c86703-52c7-43fc-b154-15ec6fbcec12/4f71a57f-95c9-4fc6-811c-246dcd643508.m4a usedRetries=0 (index-Dk_n8-Sf.js, line 16) [Log] [enemy-defeat-voice] play – "https://utsaqkhxqllqkazxzhow.supabase.co/storage/v1/object/public/entity-states/audios/94c86703-52c7-43fc-b154-15ec6fbcec12/4f71a57f-95c9-4f…" (index-Dk_n8-Sf.js, line 16) "https://utsaqkhxqllqkazxzhow.supabase.co/storage/v1/object/public/entity-states/audios/94c86703-52c7-43fc-b154-15ec6fbcec12/4f71a57f-95c9-4fc6-811c-246dcd643508.m4a" [Log] [shortSound.play] sound.play alias=https://utsaqkhxqllqkazxzhow.supabase.co/storage/v1/object/public/entity-states/audios/94c86703-52c7-43fc-b154-15ec6fbcec12/4f71a57f-95c9-4fc6-811c-246dcd643508.m4a usedRetries=0 (index-Dk_n8-Sf.js, line 16) [Log] [enemy-defeat-voice] play – "https://utsaqkhxqllqkazxzhow.supabase.co/storage/v1/object/public/entity-states/audios/ee1d4658-625f-4b2c-8e13-e068a7d7da10/ebf0a298-4882-4f…" (index-Dk_n8-Sf.js, line 16) "https://utsaqkhxqllqkazxzhow.supabase.co/storage/v1/object/public/entity-states/audios/ee1d4658-625f-4b2c-8e13-e068a7d7da10/ebf0a298-4882-4f59-9080-0f479e4da088.m4a" [Log] [shortSound.play] sound.play alias=https://utsaqkhxqllqkazxzhow.supabase.co/storage/v1/object/public/entity-states/audios/ee1d4658-625f-4b2c-8e13-e068a7d7da10/ebf0a298-4882-4f59-9080-0f479e4da088.m4a usedRetries=0 (index-Dk_n8-Sf.js, line 16)

asuki.uehata@instansys.co.jp2026/06/10 12:58

新API実装前から もともとあったバグ やられボイスがならない 問題が解消した。

asuki.uehata@instansys.co.jp2026/06/10 12:59

playEnemyDefeatVoice の呼出箇所は AnimationDebug.tsx の2箇所だけで、バトル本体(Battle.tsx / Battle/Enemy.tsx)からは一切呼ばれていません。

Enemy.tsxdefeatEffect は spin / blastOff / explode の演出系のみ参照していて、voice の発火実装が抜けているようです(機能未実装または実装漏れ)。

→ 「実機で鳴らない」のは旧 API のバグではなく、そもそもバトル中の発火経路が存在しないのが根本原因です。新 API への置換では解決しない問題。

確認のため AnimationDebug.tsx の呼出方を見て、バトル本体に同じ trigger を入れるべき場所を特定します。

読み取り 2個のファイル

結論

playOneShotVoiceByUrl は実機で鳴らないのではなく、バトル中の Enemy.tsx から発火経路自体が存在しないのが根本原因でした。

  • AnimationDebug.tsx ではプレビュー用に enemyState === "dead" に切り替えた時に playEnemyDefeatVoice を呼んでいる
  • バトル中の Enemy.tsx では live.state === "dead" を「吹っ飛び演出」用にしか参照しておらず、voice 発火していない

つまり機能未実装。SE(キラーン)は別経路で発火しているから鳴っていただけで、voice は一度も鳴ったことがない状態だった可能性が高い。