Skip to content

Conversation

@adarapata
Copy link
Contributor

@adarapata adarapata commented Aug 1, 2023

状況

  • Unity : 2019.4.29f1

PreloadedAssetLoaderを設定してUnityEditorで再生した場合、特定状況で _loader.PreloadedObjects にObjectが入っておらず、ページ遷移ができない。

原因

UnityEditor上のPreloadedAssetLoader.OnEnableは発生タイミングが状況に応じて変わる

  • そのままPlayModeを実行すると、PlayMode中にUnityScreenNavigatorSettingsがインスタンス化され、参照されたPreloadedAssetLoaderがロードされ、OnEnableが呼ばれる(想定される正常ケース)
  • Editor上でUnityScreenNavigatorSettings.assetもしくはPreloadedAssetLoader.assetを選択した場合、そのタイミングでロードされOnEnableが実行される

ロード済みのScriptableObjectはPlayMode再生時に一度OnDisableが呼ばれてから再度OnEnableが呼ばれるが、これはPlayMode中ではないらしく、 Application.IsPlaying == false となっていた

対応

Application.IsPlaying のバリデーションを外しました。
ただ、ScriptableObjectのOnEnableタイミングがハンドリングしにくいのは変わらないので、根本設計を変えるかLoadが呼び出された時にランタイムに読み込むなどにした方がいいかもしれません。

refs

https://gamedev.stackexchange.com/questions/188224/scriptableobjects-events-execution-order

@Haruma-K Haruma-K self-requested a review August 2, 2023 02:36
@Haruma-K
Copy link
Owner

Haruma-K commented Aug 2, 2023

こちらScriptableObjectの挙動おっしゃる通りですね。
修正内容問題なさそうなのでマージさせていただきます!ありがとうございます。

(IssueTrackerにもありましたがWon't Fixになってました)
https://issuetracker.unity3d.com/issues/application-dot-isplaying-is-false-when-onenable-is-called-from-a-scriptableobject-after-entering-the-play-mode

@Haruma-K Haruma-K merged commit cea441f into Haruma-K:master Aug 2, 2023
@Haruma-K
Copy link
Owner

Haruma-K commented Aug 2, 2023

リリースしました、ありがとうございました!
https://github.com/Haruma-K/UnityScreenNavigator/releases/tag/1.6.4

@adarapata adarapata deleted the fix_preloadasset_not_work_in_editor branch August 2, 2023 10:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants