x

Search in
Sort by:

Question Status:

Search help

  • Simple searches use one or more words. Separate the words with spaces (cat dog) to search cat,dog or both. Separate the words with plus signs (cat +dog) to search for items that may contain cat but must contain dog.
  • You can further refine your search on the search results page, where you can search by keywords, author, topic. These can be combined with each other. Examples
    • cat dog --matches anything with cat,dog or both
    • cat +dog --searches for cat +dog where dog is a mandatory term
    • cat -dog -- searches for cat excluding any result containing dog
    • [cats] —will restrict your search to results with topic named "cats"
    • [cats] [dogs] —will restrict your search to results with both topics, "cats", and "dogs"

[Closed] VoipListenerSynthComponentが保持するAudioComponentがGCされない

VoipListenerSynthComponentは FVoiceEngineImpl::SubmitRemoteVoiceData にOwner指定なしで生成され、OuterはTransientとして生成されます。

RemoteTalkerが設定されている場合、同関数内のApplyVoiceSetting呼び出し内でSynthComponentはAudioComponentを生成し、
FVoiceSettings::ComponentToAttachToが設定されている場合、SynthComponentが保持するAudioComponentだけをRegisterComponentWithWorldに登録します。

この状態でレベル遷移を行うと、AudioComponentはSynthComponentから強参照されているためGCされませんが、 Worldには紐付いているため、 void FScene::Release()でEnsureし、以下のログを出力します。

 LogOutputDevice: Error: Ensure condition failed: !ActorComponent->IsRegistered() || ActorComponent->GetScene() != this [File:Z:\perforce\Game\Engine\Source\Runtime\Renderer\Private\RendererScene.cpp] [Line: 2733]
 LogOutputDevice: Error: Component Name: AudioComponent /Engine/Transient.VoipListenerSynthComponent_5:AudioComponent_0 World Name: World None.None Component Asset: /Engine/Transient.VoipListenerSynthComponent_5:Synth

FScene::Releaseの内部のチェックはDevelopmentビルドでだけ有効になるので、クリティカルな問題ではありませんが、
これらの問題を回避するためにVoip関連のAPI呼び出しやレベル遷移時の後始末に特定の方法が必要になるのであればご教示いただけると幸いです。

Product Version: Not Selected
Tags:
more ▼

asked Feb 21 '19 at 12:11 PM in Japanese

avatar image

Answers.Archive STAFF
1.9k 206 313 684

avatar image Answers.Archive STAFF Feb 21 '19 at 12:12 PM

追記ですが、SynthComponentにぶら下がったまま次のレベルに移動して AudioComponentが不幸にも再生成されずに利用されると 古いレベルに登録されていたAudioComponent->GetWorld()が解放済みのメモリを返すために 不正アクセスが発生してクラッシュします。

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

The question has been closed Feb 21 '19 at 12:14 PM by Nori Shinoyama for the following reason:

The question is answered, right answer was accepted


1 answer: sort voted first

原因が判明したのでCloseします。

4.21への対応の不備でRemoveAllRemoteTalkers()が呼び出されていないだけでした。
レベル遷移前に
IOnlineVoice::RemoveAllRemoteTalkersとUVOIPStatics::ClearAllSettingsを呼び出すと良さそうでした。

more ▼

answered Feb 21 '19 at 12:12 PM

avatar image

Answers.Archive STAFF
1.9k 206 313 684

(comments are locked)
10|2000 characters needed characters left
Viewable by all users

Follow this question

Once you sign in you will be able to subscribe for any updates here

Answers to this question