先日、自身が作ったネタのフリーゲームをアップデートしまして、「8時1分~8時9分になると別イベントが発生する」という処理を組み込みました。
実際にその時間端にプレイして頂けた方から感想頂く機会もあり、大変感謝しております。
同時に、感想頂いた方からよく「どういう処理を組み込んでいるのですか?」というご質問を頂きます。
基本的には以前公開した「RPGツクールMVで曜日クエストみたいな曜日に応じた処理分岐を作ってみる」という記事内で説明した内容の技術を活用していますが、同記事では「曜日処理」に特化した解説になっていたので、「俺は時間で処理を変えたい!」と思う方もいるかもしれません。
今回は「現実世界の時間」にリンクするようなイベント作成を行うため、「時間帯に応じて台詞が変化する村人」の作成方法を紹介していこうと思います。
サンプルゲーム
実際にどんなイベントを作成できるの?
というのが気になる方もいると思いますので、
今回作成事例で紹介しているイベントを搭載したゲームを
RPGアツマール上で公開しています。
実際にプレイしてもらえるとイメージが付きやすいかと思います。
時間リンクするイベントを作ってみる
それでは、実際にイベント作成方法を見ていきましょう。
(今回は初心者でもわかりやすいように噛み砕いていますので、長くなることご了承下さい)
手順1 スクリプトコマンドと変数の操作を使って時間・分を取得する
まずはスクリプトコマンドを使って、Javascript上で
時間情報を取得する変数を作り、Javascriptで
時間関連の情報を取得します。
Javascriptには日付や曜日などの時間情報を色々と取得できる
『new Date()』という記述があります。
ツクールのイベントコマンドにあるスクリプトを使って、
Javascript上の変数 = new Date()
という記述を行うことで、Javascript上の変数に
色々な時間情報を取得させることができます。
今回はJavascript上で扱う変数として「timeget」という名前の変数を作り、
まずは色々な情報を取得します。
ツクールMVのイベントコマンドより、
「スクリプト」を選び、半角英数字で
『timeget = new Date();』と記述します。
このコマンドを実行することにより、
timegetには様々な時間情報が取得できました。
これにより「timeget」の後に決められた記述を行ったものを
スクリプトとして呼び込むことで、時間に関する情報を
色々と呼び出すことができるようになります。
今回は時間と分を取得していこうと思います。
●●時という時間を取得するためには「変数.getHours()」、
●●分を取得するためには「変数.getMinutes()」
という記述を使っていきます。
まずツクールで使いやすいように、ツクールの変数機能へ
取得したものを代入していきましょう。
イベントコマンドから「変数の操作」を選びます。
変数を単独にし、時間を取得したい変数の番号に、
操作を代入、オペランドをスクリプトにして
「timeget.getHours()」という記述をします。
今回は変数5を「●時取得」という変数名にしてみました。
これで、現在の時間が変数5に代入されました。
次に、「分」を取得していきます。
こちらもイベントコマンドから変数の操作を選び、
先程同様の設定にして、記述部分だけを
「timeget.getMinutes()」という記述にします。
今回は変数6を「●時取得」という変数名にしてみました。
これで、現在の分が変数6に入力されました。
手順2 時間確認の台詞を作ってみよう
手順1で時間と分は取得できました。
試しに時報の会話イベントを作ってみましょう。
イベントコマンドより「文章の表示」を選択します。
ツクールでは、\V[変数番号]という記述を文章項目に入れると
変数の数字などを表示してくれる機能があります。
今回は変数5に時間、変数6に分を取得したので、
『今は\V[5]時\V[6]分です。』と記述しましょう。
これで、現実時間を組み込むイベントが一つ完成しました。
見直してみると、こんな感じです。
実際にテストプレイしてみます。
時間を表示するイベントが作成できました。
手順3 条件分岐で時間帯別の処理を作る
最後に、時間帯によって挨拶が変わる村人の
作成事例も紹介していこうと思います。
今回はこんな感じのイベントを作ろうと思います。
18時~24時・0時~6時→こんばんは
6時~10時→おはよう
10時~18時→こんばんは
まずは手順1でも実施したように、スクリプトコマンドと
現在の時間を取得していきます。
ツクールMVのイベントコマンドより、
「スクリプト」を選び、半角英数字で
『timeget = new Date();』と記述します。
そして、手順2同様に変数へ代入していきます。
イベントコマンドから「変数の操作」を選びます。
変数を単独にし、時間を取得したい変数の番号に、
操作を代入、オペランドをスクリプトにして
「timeget.getHours()」という記述をします。
これで、変数5にはプレイヤーの操作する端末(パソコンやスマホ)から
取得した●●時という情報が代入されました。
あとは、時間帯によって異なる挨拶を条件分岐で作成すれば完了です。
イベントコマンドから条件分岐を選択します。
作る条件分岐を図に示すと、こんな図になると思います。
今回は小さい数字の時間処理から順番に分岐処理を作っていきましょう。
まず0時~6時までの処理を作ります。
条件分岐の変数欄を時間を取得した変数にし、
変数の横にある条件式を「<」(未満)にします。
そして、6時から「おはよう」に切り替わるので、
定数を「6」にします。今回はメッセージが
万が一重複しないように「条件を満たさないときの分岐を作成」に
チェックも入れます。
すると、実行内容部分が「●時取得 < 6」に当てはまる場合と、
当てはまらない場合(それ以外のとき)にわかれました。
今回は0時~6時まで「こんばんは」という表記を出すようにするので、
「●時取得 < 6」の下に文章の表示で「こんばんは」という
イベントコマンドを入れます。
次は、「それ以外のとき」に6時~10時の条件分岐を入れていきます。
先ほどと同じ工程で条件分岐を作成し、定数部分を10にします。
最初の分岐で、6未満は「こんばんは」という文章の表示に流れるように
なっているので、10未満にすることで、時間が「6~10」の処理を再現できます。
ですので、新しく作成された「< 10」の条件分岐に該当するところに
「おはよう」という、「6時~10時の処理」を入れていきましょう。
そして残るは、10時~18時の間、18時以降の2処理のみです。
まずは先工程と同じように、「それ以外のとき」の欄へ
条件分岐で時間を取得した変数が「18」未満かどうか判別する
条件分岐を追加していきます。
先ほどと同じように条件分岐を設定し、
定数部分のみ「18」に変更します。
これで、10時~18時の間の処理ができるようになりました。
「こんにちは」という文章を表示するコマンドを追加します。
ここまでで、0時~6時、6時~10時、10時~18時の処理を書き、
残りは18時~24時の処理のみです。
残り処理は一つですので、「それ以外のとき」の欄に、
「18時~24時」の処理を入れていきましょう。
以上で、時間別の処理が完成しました。
実行内容を確認してみましょう。
このようになっていれば、完成です。
テストプレイしてみて、問題なく動くか確認してみましょう。
Tips1 今回紹介した方法はあくまで簡易的な時間処理 裏技あるよ
以上で、現実世界の時間とリンクしたイベント作成例を紹介しましたが、
ここで注意点があります。
今回紹介した処理の方法は、「プレイヤーが操作している端末」、
つまりプレイヤーがPCでプレイしてたらプレイヤーのパソコン、
スマホでプレイしてたらプレイヤーのスマホに
設定されている時間を取得して処理に反映しています。
そのため、実はプレイヤーがプレイに使っているパソコンやスマホの
設定時間を変えてしまうと……
実質24時間見れてしまうような仕様になってしまいます。
ですので、あくまで簡易的なものという認識で活用すると良いと思います。
ただ、個人的には「フリーゲーム」や「同人作品」レベルであれば、
あまりに過酷な制限はユーザーのストレスに繋がる可能性があるので、
こういった裏技を残しておいたほうがいいんじゃないかな~とか
思っております。
(この辺は、ご自身の作品とご相談下さい)
自サーバーなどでアップする場合は、サーバーなどから
時間を取得するような処理を入れれば、プレイヤー端末に関係なく
時間取得ができると思います。
この辺は自分もよくわからないので、
使いたい人は各自で調べるなり、詳しい人に聞いて下さい。
■参考になりそうな情報
JavaScriptでコンピュータの日付設定に依存しない”ほぼ”正確な時計を作る
Tips2 時間処理をいっぱい使う場合は省略記述やコモンイベントを活用しよう
時間処理をたっぷり使う方は、時間取得のイベントを
データベースから作成できるコモンイベントで、色々なイベントで
呼び出しやすいコモンイベント化し、簡単に呼び出すような構成にすると
記述が少なくて楽ちんかと思います。
また、今回はわかりやすくするために細かく時間取得などを
行うコマンドで解説しましたが、条件分岐などを省略して
作成する方法もあります。
参考:曜日を一行で取得するJavaScriptはこちらです。 | Ginpen.com
この技術を応用できると思いますので、
よくわかる方は、省略記述も使うと良いと思います。
Tips3 時間処理に特化したプラグインもあります
時間を取得するイベント作成は簡単ですので、今回はJavascriptで
記述してみましたが、「俺はどうしてもスクリプトを書きたくない」
「やっぱよくわからない!」という人もいると思います。
そんな人のために、にぎりめしさんが
現実時間を使えるプラグインも作成されています。
参照:【RPG Maker MV】UsefulTimer【Plugin】 | にぎりめし備忘録
個人的にこのプラグインも設定理解が大変な印象でしたので、
簡単な時間処理であればスクリプト使ったほうが早いと思いますが、
どうしても今回の開設理解できない、プラグインでやりたい!
という人は、このプラグインを活用すると良いかと思います。
まとめ
今回は、スクリプトを使って現実世界の時間を活用した
処理方法の解説を行ってきました。
すごくマイナーな話になるのですが、
自分は「大貝獣物語」というスーファミのゲームが好きです。
(エンカウント率超高い&トラウマを有むので有名なRPGです)
そんな大貝獣物語の続編、大貝獣物語IIでは
「PLGS=パーソナルライブゲームシステム」という、
現実時間に応じて強力なアイテムや召喚魔法を
取得できるようなエリアもあったりします。
同作品では、スーファミの電池が切れるとこれ利用できずに大変!
みたいな小ネタもあるのですが、こういった時間処理は
裏技とかサブストーリーにも活用しやすい処理だと思います。
ユーザーにストレスを与えない程度に活用されると
イベントの幅も広がり、縛りのある楽しみも生まれるのではないかと
思います。
*作成画面の画像、サンプルのゲームデータはRPGツクールMVを利用し作成しております。
RPGツクールMV→(c)2015 KADOKAWA CORPORATION./YOJI OJIMA