原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【Unity】小ネタ:コルーチンを途中から再開する

圧が強い

何気にYoutubeで「犬神家の一族(1976年版)」についての解説動画を視聴したら、それ以降Youtubeのホーム画面が助清で埋め尽くされた皆さんこんにちは。「犬神家の一族」を語る解説動画多すぎです。そして揃いも揃ってゴムマスク姿をサムネに使い過ぎです。地獄かと思った。因みに「犬神家の一族」には2006年版もありますが、そちらについて取り上げる動画は殆ど無いみたいですね。まぁ大柄な野々宮珠世とかちっとも不遇なヒロインに見えないので1976年版だけ見ていれば十分なのかもしれませんが。

 

終始不穏なゲーム

「和階堂真の事件簿」というアプリに似てるなぁ、と思いながらプレイしていました。

どちらもミステリーものでドット絵主体の横スクロールのアドベンチャーゲームですが、「和階堂真の事件簿」がフーダニット型の本格推理なら、こちらの「Loretta」はヒッチコック系のサスペンススリラーといった感じ。

store.steampowered.com

アイテムを探して謎解きを楽しむというよりはストーリーと演出を楽しむゲームだと思います。ふとした事から夫に殺意を抱いた主人公が現実と悪夢が入り混じった白昼夢のような世界の中でドンドン追い詰められていく様子がスピーディに展開していきます。終始不穏な雰囲気が漂う中、中だるみするような箇所はなく結末までハラハラな展開が続くのでプレイ自体に不満はないです。

まぁ、展開がスピーディな分、プレイ時間が短くなる(二時間半ぐらい)のは仕方ないのですが、その対策の為なのか、各キャプチャーの間にパズルゲームのようなミニゲームが挟まれています。これはちょっと蛇足でした。
値段が1,700円なので値段相応なのかどうかは判断が分かるところですが、ストーリー重視のゲームを作っているゲーム開発者の方はストーリーの展開の仕方や伏線の張り方など参考にすべき箇所は多いので購入する価値は十分あると思います。何気ない会話の中にドキッとするようなワードを挟むのは、ミステリーを形作る手法として上手いなぁと思わされました。

 

一時停止機能

自作ゲームの中で、ロボットにコマンドを発行して目的地まで誘導する、というパズルゲームを作っています。

 

これは下の図のようにコルーチン内で発行コマンド数分処理をループして実行する、という実装になっているのですが、ユーザ操作でゲームを一時停止させる場合、このコルーチンも停めないといけない。

ただ、コルーチンはStopCoroutineで停止することはできても、その後のStartCoroutineでは途中から再開させる事はできず、最初からの開始になってしまいます。つまり、上の図だとコマンド配列の取得Indexが0から再開されてしまう、これは非常にまずい。

 

色々調べた結果、まずコルーチンの処理を「IEnumerator型」のメンバ変数に保持して、

IEnumerator ProgramEra;

private void RunProgram()
{
    // IEnumeratorを保持
    ProgramEra = RunProgramPrc();
    
    // コルーチンの開始
    StartCoroutine(ProgramEra);
}

private IEnumerator RunProgramPrc()
{
    var delay = new WaitForSeconds(0.1f);

    // コマンド数分繰り返し
    for (int iCnt = 0; iCnt < CommandNum; iCnt++)
    {
        // コマンド実行処理
        
        
        while (ロボット動作中?)
        {
            yield return null;
        }
        
        yield return delay;
    }
}

StopCoroutineとStartCoroutineでそのメンバ変数を指定すれば良い事が分かりました。

/// <summary>
/// コルーチンの一時停止
/// </summary>
private void PausePrc()
{
    StopCoroutine(ProgramEra);
}

/// <summary>
/// コルーチンの再開
/// </summary>
private void RestartPrc()
{
    StartCoroutine(ProgramEra);
}

これによりStartCoroutineで再開しても、コマンド配列のIndex指定は停止前の値を引き継ぐことができるので正しく処理を再開することができました。

 

ふりーむ版リリースに向けて

自作の3D脱出ゲーム「W.T.」は全五章のうち前半2章を試行版としてふりーむにリリースする予定です。
リリース日は3月初旬予定で、現在はリリースに向けてブラッシュアップ中なのですが、そういう時に限って本編に関係のないギミックを作る作業にのめり込んでしまう・・・

最近作った「ビット演算時計」、無駄に時間が掛かった。

他にやることは一杯なんですがね。なんとか3月初旬にリリースできるように頑張りたいと思います。

youtu.be

そして明日から3月!

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。