β版からの移行について

164 views
Skip to first unread message

mikazuki

unread,
Mar 12, 2017, 10:52:51 PM3/12/17
to 宴ユーザーグループ
いつも大変お世話になっております。

宴のバージョン:宴3.0.0f1(β版)から3.0.1に移行
Unityのバージョン:5.5.0f3
を使用しています。

新しい宴(3.0.1)をアセットストアからダウンロードし、インポートした後、「宴のシナリオを再インポートしてバージョンアップする必要があります。よろしいですか」というダイアログが表示されるのですが、「はい」を押すとUnityがフリーズしてしまいます。
また、「はい」ではなく「Cancel」を押した後、Scenario Dataで「Import」を選択すると、Unityがフリーズしてしまいます。

どうすれば良いでしょうか?

マッドネスラボ

unread,
Mar 12, 2017, 11:03:35 PM3/12/17
to 宴ユーザーグループ
要望があって、エクセル関数などが混じってもいいように少し書き換えたので、そのせいかもしれません。
こちらのリンク先にプロジェクトを送信していただけるでしょうか。

mikazuki

unread,
Mar 13, 2017, 12:06:04 AM3/13/17
to 宴ユーザーグループ
プロジェクトをお送りしました。
お手数おかけしますが、どうぞよろしくお願いいたします。

マッドネスラボ

unread,
Mar 13, 2017, 4:44:14 AM3/13/17
to 宴ユーザーグループ
やはり、エクセルインポート時の不具合でした。
メールでお渡しした、修正パッケージを適用してみてください。

インポート設定に、いくつか処理を追加しました。
基本はデフォルトのままだで大丈夫です。それが今まで通りです。
以下、追加機能です。

ParseFomula
これは宴3.0.1で追加した機能です。詳細はこちら
これがエラーの原因でしたので、デフォルトは機能をオフにして、
追加機能を使いたい人が、チェックをオンにするしてもらうようにします。
なので、今まで通りの書式を使いたい人は、オフのままで使ってください。





それと、こちらは使わなくても良いのですが、
エクセルのインポート処理が非常に時間がかかっていたのでちょっと見てみました。
宴のシナリオを解析する部分ではなく、エクセルファイルを開くこと自体に時間がかかっていました。
どうも、xlsxファイルだとより重いようで、1ファイル開くのに2~3秒。結果として10個もファイルがあれば2~30秒かかってしまうようです。
それと、メモリ負荷も相当かかっているようでした(おそらく、フリーズしたのはこのせいもあると思います)

対策として、
・Qucik Auto Import [Warning] 
という機能を追加しました。

これは、エクセルファイルを上書きしたとき、自動でされるインポート処理を簡易的に行って高速化するためのものです。
クイック処理が有効だと、「書き換えたエクセルファイルのみの更新をインポート」します。
つまり、更新していないエクセルファイルは開かないので、処理が早くなります。

ただし、マクロシートを書き換えた場合は、他のエクセルファイルにそのマクロの変更は適用されくなってしまうので注意してください。
たとえば、エクセルファイルAに書いているマクロを書き換えた場合、
エクセルファイルBでそのマクロを使っていたとしても、変更が適用されなくなってしまいます。
(エラーや警告も出せません)

そういう場合は、ScenarioDataBuilder経由のImportで、全エクセルファイルを今まで通りインポートしますので、
マクロシートを書き換えた場合はこちらからインポートしてください。
またはチェックをオフにしたままであれば、今まで通り使えます。

頻繁に更新→テストを繰り返すときは、「Qucik Auto Import」をオンにしてみると良いかと思います。
ただ、うっかりミスでマクロの更新が適用されないままになってしまうケースもあると思いますので、
安全性を優先するのであれば、オフのまま使ってください。

mikazuki

unread,
Mar 13, 2017, 6:10:57 AM3/13/17
to 宴ユーザーグループ
修正いただき、また、便利な機能追加までしていただいてありがとうございます。
Qucik Auto Import [Warning]を使用させていただいたところ、エクセルを変更し保存した後、Unityに戻った際の待ち時間がかなり短縮されました。
とても助かりました。今後活用させていただきます。
どうもありがとうございます。


いただいたパッケージを適用し、Unity上でゲームを再生したところ、以下のエラーが出るようになってしまいました。

NullReferenceException: Object reference not set to an instance of an object
MsStartGamenVoice.VoiceSaisei () (at Assets/MyScript/00Start/MsStartGamenVoice.cs:63)

MsStartGamenVoice.csの63行目では、宴のパラメータ(System)に保存してある値を読み込んでいます。
(パッケージを適用する前までは、エラーは発生せず、正常に値を読み込むことができていました。)

どうぞよろしくお願いします。

マッドネスラボ

unread,
Mar 13, 2017, 7:19:07 AM3/13/17
to 宴ユーザーグループ
ご連絡ありがとうございます。

いただいたプロジェクトで確認してみたところ、今回の修正を適用する前(_Utage3.0.0)でも同じエラーがでるようでした。

マッドネスラボ

unread,
Mar 13, 2017, 7:33:54 AM3/13/17
to 宴ユーザーグループ
試してみたところ、VoiceSaiseStartを指定時間後に再生となっていると思うのですが、
もしかすると、宴の初期化が終わる前に呼び出されているのが原因かもしれません。
(秒数を増やすとエラーがなくなったので)

秒数指定ですと、端末のスペックによっては初期化が終わっていない場合がありますので
このように、コルーチンなどを使って、宴の初期化処理を待った後に呼び出すようにしてみてください。



//この処理はコメントアウト

//        Invoke("VoiceSaisei", byousuu);


//コルーチンを使って初期化を待つ

StartCoroutine(VoiceSaiseiAfterEngineBoot());

    }

IEnumerator VoiceSaiseiAfterEngineBoot()

{

//指定秒数待つ

yield return new WaitForSeconds(byousuu);


//パラメーターを使うには、宴の初期化待ちをする

while (Engine.IsWaitBootLoading) yield return null;


//ボイス再生

VoiceSaisei();

}




mikazuki

unread,
Mar 13, 2017, 8:21:35 AM3/13/17
to 宴ユーザーグループ
ご助言ならびにスクリプトのサンプル、ありがとうございます。

ご助言を拝見する前、先月~今日にかけて製作したデータのバックアップ(当時は正常に動作していたもの)を起動させてみたのですが、なぜか以下のケースのいずれかになってしまい、正常に動作しなくなってしまいました。

・ゲーム再生後BGMが一瞬鳴った後、Invokeが作動したと同時に無音になる(音声が再生されない)ケース
・ゲーム再生後BGMが一瞬鳴った後、Invokeが作動したと同時に無音になり、無音の状態で音声が再生され、その後無音が続くケース

なお、それぞれ以下の様な警告が表示されました。

defaultWindowNameList is zero
UnityEngine.Debug:LogWarning(Object)
Utage.AdvMessageWindowManager:OnClear() (at Assets/Utage/Scripts/ADV/Logic/MessageWindow/AdvMessageWindowManager.cs:222)
Utage.AdvEngine:<ClearSub>m__0(IBinaryIO) (at Assets/Utage/Scripts/ADV/AdvEngine.cs:486)
System.Collections.Generic.List`1:ForEach(Action`1)
Utage.AdvEngine:ClearSub(Boolean) (at Assets/Utage/Scripts/ADV/AdvEngine.cs:486)
Utage.AdvEngine:ClearOnStart() (at Assets/Utage/Scripts/ADV/AdvEngine.cs:450)
Utage.<CoBootFromExportData>c__Iterator0:MoveNext() (at Assets/Utage/Scripts/ADV/AdvEngine.cs:316)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
Utage.AdvEngine:BootFromExportData(AdvImportScenarios, String) (at Assets/Utage/Scripts/ADV/AdvEngine.cs:307)
Utage.<LoadEngineAsyncSub>c__Iterator3:MoveNext() (at Assets/Utage/Scripts/ADV/AdvEngineStarter.cs:177)
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

defaultWindowNameList is zero
UnityEngine.Debug:LogWarning(Object)
Utage.AdvMessageWindowManager:OnClear() (at D:/UnityDevelop/TousyouTengi_Genpon/Assets/Utage/Scripts/ADV/Logic/MessageWindow/AdvMessageWindowManager.cs:222)
Utage.AdvEngine:<ClearSub>m__0(IBinaryIO) (at D:/UnityDevelop/TousyouTengi_Genpon/Assets/Utage/Scripts/ADV/AdvEngine.cs:382)
System.Collections.Generic.List`1:ForEach(Action`1)
Utage.AdvEngine:ClearSub(Boolean) (at D:/UnityDevelop/TousyouTengi_Genpon/Assets/Utage/Scripts/ADV/AdvEngine.cs:382)
Utage.AdvEngine:ClearOnStart() (at D:/UnityDevelop/TousyouTengi_Genpon/Assets/Utage/Scripts/ADV/AdvEngine.cs:346)
Utage.<CoBootFromExportData>c__Iterator0:MoveNext() (at D:/UnityDevelop/TousyouTengi_Genpon/Assets/Utage/Scripts/ADV/AdvEngine.cs:316)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
Utage.AdvEngine:BootFromExportData(AdvImportScenarios, String) (at D:/UnityDevelop/TousyouTengi_Genpon/Assets/Utage/Scripts/ADV/AdvEngine.cs:307)
Utage.AdvEngineStarter:LoadEngine(Int32) (at D:/UnityDevelop/TousyouTengi_Genpon/Assets/Utage/Scripts/ADV/AdvEngineStarter.cs:193)
Utage.AdvEngineStarter:LoadEngine() (at D:/UnityDevelop/TousyouTengi_Genpon/Assets/Utage/Scripts/ADV/AdvEngineStarter.cs:145)
Utage.AdvEngineStarter:Awake() (at D:/UnityDevelop/TousyouTengi_Genpon/Assets/Utage/Scripts/ADV/AdvEngineStarter.cs:139)

試しにセーブデータを全て削除した状態でも起動させてみたのですが、状況は変わりませんでした。


ご助言を拝見した後、お教えいただいたスクリプトを適用させてみたのですが、Unity再生後以下の警告が出て、BGMが鳴った後、VoiceSaisei();が作動したと同時に無音になってしまいました。

defaultWindowNameList is zero
UnityEngine.Debug:LogWarning(Object)
Utage.AdvMessageWindowManager:OnClear() (at Assets/Utage/Scripts/ADV/Logic/MessageWindow/AdvMessageWindowManager.cs:222)
Utage.AdvEngine:<ClearSub>m__0(IBinaryIO) (at Assets/Utage/Scripts/ADV/AdvEngine.cs:486)
System.Collections.Generic.List`1:ForEach(Action`1)
Utage.AdvEngine:ClearSub(Boolean) (at Assets/Utage/Scripts/ADV/AdvEngine.cs:486)
Utage.AdvEngine:ClearOnStart() (at Assets/Utage/Scripts/ADV/AdvEngine.cs:450)
Utage.<CoBootFromExportData>c__Iterator0:MoveNext() (at Assets/Utage/Scripts/ADV/AdvEngine.cs:316)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
Utage.AdvEngine:BootFromExportData(AdvImportScenarios, String) (at Assets/Utage/Scripts/ADV/AdvEngine.cs:307)
Utage.<LoadEngineAsyncSub>c__Iterator3:MoveNext() (at Assets/Utage/Scripts/ADV/AdvEngineStarter.cs:177)
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

最新のUnity(5.5.2f1)をダウンロードして、そこでもお教えいただいたスクリプトを適用したデータを再生してみたのですが、上記と同じdefaultWindowNameList is zeroが出て、BGMが一瞬鳴った後、無音になるようになってしまいました。

今朝、宴を3.0.0f1(β版)から3.0.1に移行する直前までは、 VoiceSaisei();は正常に動作していたように思います。

イレギュラーな問題で申し訳ございませんが、もし解消する手段があればお教えいただけますと幸いです。

マッドネスラボ

unread,
Mar 13, 2017, 8:56:44 AM3/13/17
to 宴ユーザーグループ

Canvas-AdvUI > Boot オブジェクトにある、Utage Ugui Boot コンポーネントの

「Is Wait Boot」をチェックしてもらえるでしょうか。





宴3.0.1から 起動時の処理を少し変えています。
今までは、オフラインであれば起動後に即座に宴を初期化できていたのですが、
初期化の際に1~2フレームほど遅れるようにかかるようになったため
タイトル画面に来るまでに、まだ宴の初期化が終わってない状態になってしまっていました。
そのため、タイトル画面でBGMを鳴らしたり、ボイスを鳴らす処理が宴の起動前になってしまって、
そのあとに宴が起動されてしまうせいで、エラーがでてしまってました。

上記のチェックを入れると、タイトル画面の直前で、起動画面で宴の初期化が終わるまで待ちますので
サウンド関係のエラーががなくなると思います。

マッドネスラボ

unread,
Mar 13, 2017, 9:07:04 AM3/13/17
to utag...@googlegroups.com
また、
defaultWindowNameList is zero というのは、「デフォルトのメッセージウィンドウがなにもない」という警告です。
AdvEngine > UI > MessageWidowManager 以下のメッセージウィンドウで
初期状態でアクティブがオンになっているものを、デフォルトのメッセージウィンドウとして起動時に読みこみます。

ですので、初期状態でアクティブがオンになっているものがない場合、警告が出るようになっています。
必ずメッセージウィンドウを名前指定してから使うケースでは問題ないので、エラーではなく警告を出すだけにしています。

警告を消したい場合は、
AdvEngine > UI > MessageWidowManager 以下のメッセージウィンドウで、
一番最初に起動するメッセージウィンドウのアクティブをオンにしてみてください


mikazuki

unread,
Mar 13, 2017, 6:47:44 PM3/13/17
to 宴ユーザーグループ
ありがとうございます。
正常に動くようになりました。
大変お手数おかけいたしました。

マッドネスラボ

unread,
Mar 13, 2017, 11:14:03 PM3/13/17
to 宴ユーザーグループ
こちらこそ互換性が取れなくなる点を見落としていましてすみません。
「Is Wait Boot」のチェックで当面問題ないですが、次のアップデートでローカル起動は即座に行えるようにしておきます。

Reply all
Reply to author
Forward
0 new messages