FC2ブログ

イベントシステムの作り方 : アドベントカレンダー2018企画

みなさん、こんにちは。
ネコタです。

今回は、ツクールMVアドベントカレンダー2018という企画に乗っかって、記事を書いてみます。

今回の題材は、「イベントシステムの作り方

ツクールMVには、イベントコマンドと呼ばれるものがあります。

ゲームでは、様々なイベントコマンドを呼び出して、種々の演出が行われていきます。

このイベントコマンド。基本的には、会話とか場所移動とかアイテム取得とか・・・そういう所で使うことが多いです。使い道はかなり多岐にわたりますが、いずれにしろ、何かしらイベントを作る場合には必ず使用するものです。

これを上手に使うと、ゲームの根幹に関わってくる、ゲームをゲームたらしめる「システム」そのものまで作れるようになってきます。

何が出来るかと言えば、基本的には、画面上で起こる事なら何だってできます。

それこそ、やろうと思えば、シューティングゲームやパズルゲーム、アクションRPG、自作メニューや戦闘システムまで。ほんとに、なんでもできます(ただし、そこまで創り込むならプラグインの方が都合が良い)。


で、このイベントコマンドを使いこなすには、いくつか基礎を押さえておかないといけません。

システムの作り方を学ぶ前に、まずは、最低限4つの事を覚えてください。

・スイッチ(セルフスイッチ)
・変数
・条件分岐
・コモンイベント

この4つは、イベントシステムを作るうえで絶対必要になります。いずれも、イベントコマンドの最初のタブにある、使用頻度の非常に高いものです。


イベントシステムでよく使うイベントコマンド
tc40_001.png

赤枠で囲った部分は最低限必須のところになります。


また、出来るだけ早いうちに使いこなせるようになった方が便利なのが、以下の緑枠で囲ったものになります。

・ループ(ループの中断)
・イベント処理の中断
・ラベル(ラベルジャンプ)


イベントシステムで割と使うイベントコマンド
tc40_002.png


蛇足にはなりますが、青い枠で囲った部分は、使えるようになると幅が広がるイベントコマンドです。プレイヤーが選択する項目になるので、プレイヤー参加型のイベント分岐を作ることができます。これは、必要になったときに覚えれば大丈夫です。

イベントシステムでたまに使うイベントコマンド
tc40_003.png


他にも、使えるコマンドはいくつかありますが、それはさておき。
それぞれの解説に入りましょう。


■スイッチ(セルフスイッチ)


スイッチは、テレビのリモコンとか階段の照明なんかについてるアレと同じイメージです。ONもしくはOFFのどちらかの状態で管理されるものです。

ONだから何かが起こって、OFFだから何かが起こる、と決められているものではありません。これ自体は、ただONかOFFに切り替えられます。それ以上でもそれ以下でもなく、それだけです。

使い道としては、ONなら~したい(OFFなら~したくない)、という時のフラグとして使用できます。例えば、スイッチ1がONなら照明が点いている(OFFなら点いていない)という具合ですね。

セルフスイッチは、イベント固有のスイッチです。ツクールMVだと各イベントに4つまで(A,B,C,D)が割り当てられています。各イベント固有のものなので、基本的には他のイベントでON-OFFを切り替えることができません。そのイベント内で完結するような分岐を作るのに便利です。



■変数


変数とは、変な数 ではありません。
変化する数字の事です。

ツクールにおける変数は文字列も入れることができますが、それは置いといて。基本的には、色んな数字を入れておく箱のようなものです。

変数にはそれぞれIDが割り振られており、それぞれの名前のつけられた箱に任意の数字を入れることができる、というものです。ただそれだけです。

これの役割としては、物を数えたり、フラグとして管理したりすることができます。

例えば、手持ちの薬草の数をかぞえて変数に入れておいたり。4つ持ってたら変数1番=4みたいな。あるいは歩数を入れておいたり。50歩あるいたら変数2番=50みたいな。そんな感じ。

そうやって、数字を保管(格納)しておく箱です。

それと、この箱に入れた数字は計算したりもできます。変数1=4に5を掛けて、変数1=20にしたり。

変数に入れた数字は他の変数に出したり、別な数字を入れなおしたり(代入)、計算したり(足し算、引き算、掛け算、割り算)といったことができます。



■条件分岐


条件分岐は、色んな条件を設定することで、Aの時は~する、Bの時は~する、といったように処理を振り分ける分岐点です。

ここで、先ほど紹介したスイッチや変数を使うことが多いです。

例えば、照明が点いている(スイッチ1=ON)時、部屋を明るくする(照明が点いていない場合は部屋を暗くする)。薬草を4つ持っている(変数1番=4)の時、薬草が拾えなくなる(薬草が4つでなければ拾える)。といった具合に、条件が整ったか否かでその後の処理を分岐させることができます。

システムを作るときは、これを使うことが非常に多いです。



■コモンイベント


コモンイベントは、ゲーム上のどのマップでも起動するイベントの事です。また、イベントコマンドで呼び出せるイベント処理でもあります。

システムを作るときは、どちらかというと後者のイベントコマンドで呼び出すイベント処理として扱うことが多くなりますかね。編集の都合で。

まず、コモンイベントには、起動の条件となるスイッチと処理タイミング(自動実行、並列処理)が設定できます。残念ながら、条件に変数は設定できません。

処理タイミング(トリガー)を自動実行にすると、他に実行されているイベントが無いときに、条件を満たしていればコモンイベントの内容が自動で実行されます。基本的に割り込んだりすることはありません。

処理タイミング(トリガー)を並列処理にすると、条件を満たしている限り、他のイベントが実行されていても構わずコモンイベントの内容が実行されます。他のイベントの処理に割り込んでくることがあります。なので、バグの温床にもなりやすく、扱いに注意が必要です。便利なので、バンバン使いますけどね。表立って処理を見せず、裏方でガリガリ計算させたりなんだりする時など、用途は色々。


イベントコマンドで呼び出す場合には、処理の順番に従って呼び出されます。トリガーや条件は無視されます。




■イベントシステムを作ってみよう!


それでは早速、イベントシステムを作ってみましょう。

え、あれだけで何か作れるかって?
いや、無理でしょ(笑)

他にも色々使いますが、とりあえず、他のイベントコマンドは使いながら覚えていけば大丈夫です。

まずは、簡単なところで。採集イベントを作ってみましょう。

今回作ってみる採集イベントの仕様は以下のようなものです。

・調べるとアイテムが手に入る。採集場所からアイテムがなくなる。
・しばらく時間が経つと、再び同じ場所でアイテムが手に入るようになる。

このシステムなら、先ほど紹介したイベントコマンドでほとんど作れます。


では、イベントをちゃちゃっと作ってしまいましょう。

まずは、「調べるとアイテムが手に入る」「採集場所からはアイテムがなくなる」の処理です。


イベント:1ページ目
tc40_004.png

<トリガー>
決定ボタン

<実行内容>
スイッチの操作:#0317 【採集】01 = ON
文章:なし, ウィンドウ, 中
文章
文章         カンタリオンを採取した!
アイテムの増減:カンタリオン + 1


実行内容は、3つだけ。

・スイッチをONにして
・文章でアイテムを手に入れたことをアナウンスして
・アイテムを入手

これで、調べたらアイテムが手に入るイベントができます。

ちなみに、スイッチをONにしているのは、2ページ目に切り替えるためです。


イベント:2ページ目
tc40_005.png

<出現条件>
スイッチ: 【採集】01がON

<実行内容>
なし

このページでは、何も起こりません。ただ、画像が花から草に切り替わっています。

1ページ目で、花を調べることでアイテムを手に入れると同時に、スイッチがONされます。それにより、この何もないページに切り替わりますから、画像も草になります。これで、アイテムが採取されて無くなる演出が出来たことになります。


とりあえず、ここまで作ってみたら、一旦テストプレイをしてみましょう。

イベントの上に乗って決定ボタンを押してみて、アナウンスと共にアイテムが手に入ったでしょうか。その後、イベントは花の画像から草に変わったでしょうか。草の上で決定ボタンを押しても何も起こらないでしょうか。

確認できたら、次に進みましょう。




さて、それではここで問題

とりあえず、アイテムを採取するイベントは出来ましたね。ですが、このままでは、このイベントからは二度とアイテムを採取することができません。なぜなら、イベントはスイッチがONになったことで2ページ目に切り替わっているからです。

では、どうすれば、もう一度このイベントからアイテムを採取することができるでしょうか?



答えは、簡単。先ほどONにしたスイッチをOFFにします。すると、2ページ目は条件を満たせなくなり、出現できなくなります。2ページ目が出現できませんから、このイベントは次に条件を満たせる1ページ目(特に条件が無い)を出現させます。

1ページ目の実行内容は、調べられるとアイテムが手に入るイベントページですから、これで再び採取することができますね。



で、答えが分かりましたので、次に考えることは。

どういったときにスイッチをOFFにするか?

それを、今度はコモンイベントで作ってみましょう。



今回やりたいことは、一定時間が経ったらスイッチをOFFにするという仕様です。

コモンイベント
tc40_007.png
<トリガー>
並列処理

<スイッチ>
【採集】01

<実行内容>
ウェイト:59フレーム
変数の操作:#0447 【採集】待ち時間01 += 1
条件分岐:【採集】待ち時間01 ≥ 20
変数の操作:#0447 【採集】待ち時間01 = 0
スイッチの操作:#0317 【採集】01 = OFF

分岐終了


コモンイベントの条件は、先ほどイベントでONにされたスイッチ【採集】01を使います。

この設定で、イベントからアイテムが採取されると、自動でこのコモンイベントが起動されるようになります。

トリガーは並列処理にすることで、プレイヤーが操作不能になったり、他のイベントの進行を妨げるといったことが無くなります。



で、実行内容ですが。内容はそんなに多くありません。

・ウエイトを約1秒(=60フレーム)入れる
・変数を+1する
・変数が20以上になったら、変数を0にリセットしてスイッチをOFFにする(そうでないなら何もしない)。

このイベントの処理に1フレームが使われるので、ウエイトは60フレームから1フレーム引いた59フレームとしていますが、特に厳密にやる必要もないので60フレームでも構いません。


ちなみに、ウエイトとはです。何も処理せずに待っている時間のこと。


今回は60フレーム間を置いて変数を+1する、という処理を組んでいます。これを言い換えると、1秒待ってからその1秒を変数としてカウントする、ということになります。

そして、20カウント(20秒経過)したら~という条件分岐を組み、条件を満たしているときはスイッチをOFFに。条件を満たしていなかったら(まだ20カウントされていなかったら)スルーする。という処理になっています。



それでは、ここで一旦テストプレイをして挙動を確かめてみましょう。

イベントを調べて花を採取した後、20秒くらい待ってみてください。草が花に変わり、もう一度調べて採取できたら成功です。




これで、アイテム採取後に約20秒経ったら採集物イベントのスイッチをOFFにすることで再度採取可能にするという処理が出来ました。



さて、今回実装したかった機能を確認しましょう。

・調べるとアイテムが手に入る。採集場所からアイテムがなくなる。
・しばらく時間が経つと、再び同じ場所でアイテムが手に入るようになる。

というわけで、今回実装したいイベントの挙動は、これで完成ですね。

お疲れさまでした。




■おわり


いかがでしたでしょうか。

今回は、基本的な「スイッチ」「変数」「条件分岐」「コモンイベント」、この4つを使った簡単なイベントシステム採集システムを作ってみました。

こんな感じで、一連のイベントの挙動により一定の動作・演出を行うコマンド群のことをシステムと呼びます。

システム作りは、慣れるとそんなに難しくないです。難しくないんですが、アイディアは必要です。

最初に、どんな挙動のシステムが欲しいかなぁ~っていう想像をして、次に、それを作るにはどうしたら良いかな? どういう手順で処理を進めたらいいかな?

そうやって考えて、導き出すものなんですね。

最初のうちは勘違いしているものなのですが、先に知識(イベントコマンドの挙動)を沢山頭に詰めんでも出来る物という訳ではないです。まず、どんな挙動をさせたいか。ここをイメージすることが大事。

そして、それを実現させるための手順を具体的にイメージし、構築していくことが必要となってきます。


その後に扱っていくイベントコマンドそのものは、ぶっちゃけ、調べたり試したりしてれば勝手に覚えていきます。

あとはもう、ひたすら訓練しかありませんね。1つずつ作っては試し、トライ&エラーを繰り返していきましょう。そうすれば、いつの間にか大規模なシステムも出来るようになっています。


独学では、大体1年くらいかかると思います。私はそうでした。

でも、教えてくれる人っているのかな?




あ、私ですか?

うん、質問されれば答えますが、ツクールのイベントコマンドしか分かりません(笑)

ツクールMVはJavaScriptと呼ばれる言語だそうですが、そっちを知ってる方が色々出来ると思います。


一応、イベントコマンドを使いこなせると有利な点はありますけどね。

・どのPC版ツクールでも大体すぐに対応できる。それぞれのツクールはRubyだったりするそうですが、ツクールそのものは日本語か英語ですので。イベントコマンドの挙動なんて大体似たり寄ったりですから。

・バージョンアップにより、バグることが少ないです。バージョンがいくらになっても、ツクール自体の機能で作っているので、イベントコマンドの挙動自体が変更されない限り大丈夫。ただし、内部のプログラム自体にバグがあるときは対応できません。お手上げです。言語読めないもん(苦笑)

それくらいですかね。



ではでは、今日はこの辺で。
ネコタでした。

よいツクールライフを!



※追伸※
ちなみに、今回のシステムは私が初めて作ったイベントシステムになります。なので、本当に初心者の頃に作ったものになります。

過去記事はこちら↓
採集システム

あの頃に比べれば、だいぶ技術力も付いてきたので、今回の記事はもっとスッキリした書き方になっています。

私はプログラマーではないので、あまりスパゲティコード(複雑に絡み合ったスパゲティのようなコード)を気にしたりはしないのですが、やっぱり技術力が付いてくるとコードも洗練されてくるようですね。

必要最小限だけで動き、後で見直しても分かりやすい綺麗なコードを作れるようになることは、自分の技術力を推し測るバロメーターにもなるのかもしれませんね。


↓お役に立ちましたら、クリックをお願いします↓
にほんブログ村 ゲームブログへ
にほんブログ村

にほんブログ村 ゲームブログ ゲーム制作へ
にほんブログ村
スポンサーサイト



コメント

Secret

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: No title

>>この内容は管理人のみ閲覧できます。

ご指摘ありがとうございます!
そうなんですね、知りませんでした。修正いたしました。

こういう記事を書いていてアレなんですが、そっち方面の常識は意外と入って来ないものなので、助かりました。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: No title

>>このコメントは管理人のみ閲覧できます

ご指摘ありがとうございます。修正しました!
確かに、大文字と小文字間違うと動かなかったりしますものね。

細かいところにも気を使わなければならず、プログラミングは大変だなと思います。
そういうところすぐに気が付けるのって、凄いです。
プロフィール

猫民のんたん

Author:猫民のんたん

ネコタ:ゲーム作りが趣味の薬剤師。本職とゲーム作りの2足の草鞋を履きこなそうと日々奮闘。

毎週曜日or曜日に更新予定。
-------------------------

ミノン:ゲーム作り初心者で2児の母。前職はSE/PG。子育てをしながらゲーム作りを行おうと、日々奮闘中。

育児中のため活動休止中

最新記事
最新コメント
月別アーカイブ
カテゴリ
フリーエリア
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR