DOTWEEN ► Tween startup failed (NULL target/property - ): the tween will now be killed ► The object of type 'CanvasGroup' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
以下略…
Discussion
貴重な知見の共有ありがとうございます。
Navigathenaの設計思想に共感して使わせてもらってます。
シーン遷移演出の機能を使っていて疑問点があり質問させて頂きます。ITransitionDirectorの使用例でコンストラクタにCanvasGroupの参照を渡している部分を参考に、自分でも同じ用に画面遷移元にあるCanvasGroupの参照を渡して試してみましたが、画面が切り替わる瞬間に以下の警告がでました。
おそらく、CanvasGroupがあるシーンがアンロードされてしまいアクセスできなくなってしまったこと原因だと思うのですが、シーンをまたいでCanvasGroupにアクセスし続けられることにするとなるとDontDestroyにするか、FAQにある「アプリケーションの寿命を通して、常に存在するシーン」に置くことなどが考えられますが、作者さん的にはどのように使用されることを想定されていますでしょうか?
ご教授いただけましたら幸いです。
使っていただき、ありがとうございますm (_ _)m
確かにサンプルが動かないのはうっかりしていました…!
Canvas系の要素(およびGameObject)を使用した
ITransitionDirectorの実装法としては、遷移元にはインスタンスを置かない実装になります。(ご指摘の通り、遷移元はアンロードされるので)なので方法としては、以下のような感じになります。
今作っているゲームから「 遷移演出用のシーンをロード・作成する」の例を出すと以下のような実装になります。
SimpleLoadingTransitionDirectorが事前に作成されたシーンを読み込み、そのシーンからSimpleLoadingTransitionDirectorBehaviourコンポーネントを見つけ、演出を実行しています。(シーンの扱いにはISceneIdentifierを使用していますが、SceneManagerなど一般的なものでも構いません)もう一つ例を出すと、「シーンを新たに作って、そこにオブジェクトを逃がす方法」があります。この例はスプラッシュ画面に表示されるアートワークをフェードさせる
ITransitionDirectorです。ゲーム起動時、スプラッシュ画面のアートワークは最初から表示されているので、それをシーン遷移演出として扱い、フェードアウトさせる機能ですね。この例ではスプラッシュシーンに最初から存在しているCanvasGroupを渡して
SplashTransitionDirectorを生成し、SplashTransitionDirectorHandleではCanvasGroupを新たなシーンに逃がすようにしています。これは特殊な処理をしていて、遷移演出用のシーンを破棄するときにアートワークのインスタンスも破棄されるので、Popされない前提で作っています。(Popは履歴に残っているITransitionDirectorを利用するので、原則としてITransitionDirectorは再利用可能になっている必要があります)まとめると、「遷移演出に使用されるものは遷移元シーンには残さないようにする」といった感じですね。
サンプルは時間があるときに直すようにしておきます…!
ご返信いただきありがとうございます!
例示していただいたコードを参考に自分でも作ってみたいと思います。
このような有用なフレームワークが世に広まるように願っておりますm (_ _)m
Unity6でスタメン起用させて頂いてます!
大きすぎず小さすぎない絶妙なサイズ感が気に入っています
特にVContainerとの併用が凄く凄く良いです
そのまま使うとエントリポイントが一個になりますので、IoCも含めてDIコンテナのある暮らしの良さが分かりやすく伝わってきます
さらに面倒なマルチシーン開発が一気に楽しくなったりして
素晴らしいものなのでもっと流行れと念じています
開発頑張って下さい!
ご使用ありがとうございます!
業務等でもいい感じに運用できているので、VContainerとの統合はかなり会心の出来ですね~