バグ報告(DontDestroyOnLoad使用時の非アクティブからアクティブにした時の挙動)

858 views
Skip to first unread message

aozora...@gmail.com

unread,
May 27, 2018, 3:14:04 AM5/27/18
to 宴ユーザーグループ
宴→SendMessageからシーン切り替え→切り替え先シーンで宴呼び出し
を実現するためにDontDestroyOnLoadで宴オブジェクトを保持し、切り替え先シーンでも宴を呼び出せるようにしましたが、
切り替え先シーンで宴オブジェクトを非アクティブにして再度アクティブにすると、クリックしてもシナリオが先に進みません(マウスホイールを使っても進まない)。ボタンだけは作動するので、ロードをすると再びクリックしてシナリオが進むようになります。
また、アクティブにした後、クリックしてもシナリオが進まないのに加え、3DプレハブのMecanimのステートも非アクティブにした時の物と変わっていました。(非アクティブにする直前は2DUnityちゃんが笑って走っていたのに、アクティブにしたら別の表情・動きになっている等)
また、シーンを切り替えなくても、宴のオブジェクトを一旦すべて非アクティブにしてから再度アクティブにしても同じ現象が起きました。

宴のバージョン:3.3.8
UnityのバージョンとOS:Unity2017.4.3f1 Windows


マッドネスラボ

unread,
May 27, 2018, 6:25:46 AM5/27/18
to 宴ユーザーグループ
DontDestoryOnLoadはおそらく関係ないです。
Unityの仕様上、Activeをfalseにするとコルーチンが止まってしまいますので、一時停止のようには使えません。
宴だけではなく、Unity公式のコンポーネント(例えばNaviMeshなど)も同じくアクティブを切り替えると動かなくなります。

aozora...@gmail.com

unread,
May 27, 2018, 7:40:09 AM5/27/18
to 宴ユーザーグループ
unityの仕様だったんですね。失礼致しました。
https://groups.google.com/forum/#!topic/utageuser/Vu1l2wRGm6w
質問にも書きましたが、私も上記URL先で書かれているような使い方をしたいと思っていて、
DontDestoryOnLoadを使用した上で3Dゲーム終了後に宴を正常に呼び出す方法はあるのでしょうか?
セーブ有りの通常の宴で、途中のシナリオから呼び出したいです。

マッドネスラボ

unread,
May 27, 2018, 10:59:58 AM5/27/18
to 宴ユーザーグループ
UIとかのように、コルーチンを使っていないコンポーネントか、Activeを切り替えてもコルーチンが復活するように作っているものは問題ないのですが
宴の場合はActiveをオフにするとコルーチンが止まってしまいます。
なので、Activeをオフにしないのが一番確実です。
・engine.EndScenario()とすると強制的にシナリオを終了します。これを使ってみてください。

なんらかの理由でActiveをオフにする必要があるのであれば、
その状態でJumpシナリオをするとおかしくなりますので、いったんEndScenarioは呼ぶ必要があります。
・Activeをオフにする直前にEndScenario()を呼ぶ。
・engine.JumpScenario( scenarioLabel );を呼ぶ直前にEndScenario()を呼ぶ
これのどちからをしてください。


aozora...@gmail.com

unread,
May 27, 2018, 12:49:07 PM5/27/18
to 宴ユーザーグループ
EndScenarioを呼び、最初の画面に戻ったのですが、
その状態でengine.JumpScenario( scenarioLabel );を呼び出してもシナリオラベルに飛びません。
3Dゲーム終了後に指定したシナリオラベルに直接移行する実装は可能でしょうか?

マッドネスラボ

unread,
May 27, 2018, 9:39:25 PM5/27/18
to 宴ユーザーグループ
可能です。
飛ばないというのはどういう状況でしょうか?
エラーメッセージなどは表示されていませんか?

aozora...@gmail.com

unread,
May 28, 2018, 12:09:00 AM5/28/18
to 宴ユーザーグループ
最初の画面のまま遷移しませんでしたが、
AdvEngineの読み込みのタイミングが悪かったみたいです。
修正後無事動作しました。ありがとうございました。

aozora...@gmail.com

unread,
Jul 3, 2018, 8:16:09 PM7/3/18
to 宴ユーザーグループ
お世話になっております。
こちらの件ですが、シーン切り替え後のUtageで3DPrefab等リソースを読み込むとエラーが出ます。
エラーメッセージ:Coroutine couldn't be started because the the game object 'FileManager' is inactive!

リソースを読み込まず文字だけの場合だと問題なく動作します。
Dropboxの方に、使用した自作スクリプト3つとUtageプロジェクトファイルScene1・Scene2、エラーメッセージ全文を記したテキストファイルを送信致しました。Scene1をプレイして頂けるとバグが再現されます。
お忙しいところ恐れ入りますが、調査の方お願いしてもよろしいでしょうか?何卒よろしくお願い申し上げます。

マッドネスラボ

unread,
Jul 3, 2018, 8:30:19 PM7/3/18
to 宴ユーザーグループ
>Coroutine couldn't be started because the the game object 'FileManager' is inactive!
これはUnityの一般的なエラーです。
宴で使っているFileManagerというオブジェクトのActiveがオフになっています。
これをオフにすることは宴のコードでは行っていませんし、オフのまま宴を動かすことはできません。



aozora...@gmail.com

unread,
Jul 3, 2018, 8:36:25 PM7/3/18
to 宴ユーザーグループ
シーン切り替え後のUtageでもFileManagerは存在していて、Activeになっているのですが、エラーを参照するとシーン切り替え前のFileManagerを参照しています(こちらはスクリプトでアクティブをオフにしています)。アクティブになっている方のFileManagerを使う方法はありますか?

マッドネスラボ

unread,
Jul 3, 2018, 10:38:07 PM7/3/18
to 宴ユーザーグループ
宴のManager以下のオブジェクト(FileManagerやSoundManager)はシングルトンのオブジェクトなので、ゲーム中で一つしか存在しない前提になっています。

送信していただいたプロジェクトを見ましたが、
Scene1のオブジェクトをすべてDontDestoryOnLoadにして、残したたま非アクティブにして
Scene2ではまた別に、各オブジェクトを生成しているようです。

つまりManager系のオブジェクトが
・Scene1の非アクティブなオブジェクト
・Scene2のアクティブなオブジェクト
の両方の状態で二個存在しているためにおかしくなります。

解決策としては、

1,Scene1のオブジェクトを完全に消す。
つまり、(DontDestoryOnLoad)を使わない

2,Scene2ではManager系のオブジェクトは生成しない
Manager系のオブジェクトは二個以上あってはいけないので。
ただし、このままではScene1のManager系のオブジェクトが非アクティブになっているので、アクティブになるようにする。

3,宴関係の全オブジェクトはScene1のみに置く。
 その場合、DontDestoryOnLoadを使って残すが非アクティブにはしない。宴の呼び出しは、シーン1のオブジェクトから呼び出すようにする。


基本的には3のアプローチが一番良いかと思います。
・1のアプローチは、毎回オブジェクトを作り直すので効率が悪いですし、サウンドなどシーンをまたいで再生を続ける必要があるものに使うことはできません。
・2のアプローチは、管理が複雑になる可能性もあります。
・3のアプローチは、別シーンのオブジェクトにアクセスする方法さえわかれば可能かと思います。それはUnityのプログラムの応用としていろいろなアプローチ(FindObjectOfTypeなど)がありますので、自分にあったやり方を選んでください。

Unityはシーンを複数使った作成方法について、かなり公式がかなりいい加減というか、簡単な仕組みが用意されていないため実装者に任せる形になっています。
やり方がいろいろあるため、宴側で勝手に決めるわけにはいかないため、結果として宴のようなアセットの場合も実装者に任せざるを得ません。
なので、少し難しいですが、上記を参考に自分にあったやり方をやってみてください。








aozora...@gmail.com

unread,
Jul 4, 2018, 12:13:46 AM7/4/18
to 宴ユーザーグループ
3つも解決案を提示して頂きありがとうございます。いずれかの方法でやってみようと思います。
Reply all
Reply to author
Forward
0 new messages