【GMS】オブジェクト、インスタンスとは?


うっほー!ゴッリラだよ!

今日はプログラムを設計する上で大切になってくる
“オブジェクト”と”インスタンス”について解説していくよ!

少し難しい内容になると思うけど、大切な基礎なので一緒に頑張っていこうね!

オブジェクト/インスタンスとは

オブジェクトは、現実世界で言うと”モノ”の設計図みたいなものだよ!

例えば、RPGゲーム用にプレイヤーのオブジェクトを作成するとして、
プレイヤーには、HP,レベル,名前のような情報が存在しているよね?

(プレイヤーオブジェクト内で情報である変数を宣言した例)

他にもプレイヤーは移動したり、攻撃するよね?

(プレイヤーの移動、攻撃の処理プログラムの例)

こういった、情報やプレイヤーの動きを管理するプログラムを
オブジェクトの中で作っていくんだ!例えると紙に情報を
書き込んでいって、設計図を完成させるみたいな感じ!

そして次はインスタンスについて説明していくよ!
インスタンスとはオブジェクトをもとに作られるもので、
めちゃくちゃ簡単に言うとゲーム内にオブジェクトを置くと、
オブジェクトとがインスタンスになるって感じかな!

ごめんね、めちゃくちゃわかりづらいよね…
図で説明するね!

GMS内でオブジェクトは、画面右側のResourceツリー内のObject欄で
右クリックして”Create Object”を選択することで作成できるよ!

実際に、プレイヤーオブジェクトをゲーム内に配置してみると、
インスタンスとして表示されていることが確認できるよ!

オブジェクトはあくまで設計図であって、実体はないんだ!

オブジェクトは、プレイヤーのように具体的に一つの”モノ”を
現すだけでなく、もっと抽象的な”モノ”のために作成することもできるんだ!

さっきの話の続きで、RPGゲームに4人のNPC [たいが]、[ゆうじ]、[たくま]、[ゆい]を
登場させたい、そしてそれぞれ[名前],[身長],[性別]の3つの変数を持っているとしよう。

人数が4人程度であれば、先ほどのプレイヤーのように1人ずつオブジェクト化
するのはそこまで大変ではないよね?

でも、もし1000人のNPCをゲームに登場させたい場合はどうだろう?
1人ずつオブジェクト化していたら日が暮れてしまうよね(‘_’)

どうにか1000人のオブジェクトを作成できたとしても、
途中で[体重]という変数を新しく追加したくなったらどうだろう?

うわあああああああああああああああああああ

そうならないように、似たようなオブジェクトを何度も作成する場合は
1つのオブジェクトを大きなくくりで作成するとうまくいくよ!

この場合は、NPCオブジェクトを作成するよ!

これから解説することが分かりやすいように、インスタンスの
変数をすべて画面に表示するプログラムを追加しておくね!

まずインスタンス変数ってなに?って人はこちらの記事をチェックしてね!

【GMS】変数の宣言と種類を解説

2018年10月15日

確認のために一度、NPCオブジェクトをそのままインスタンス化して
みるね!(Spriteを割り当てていないから絵はないよ)

※Spriteとはオブジェクとの視覚的な表象(絵)のことだよ!

※NPSではなく,正しくはNPCインスタンス変数です。

これで何の値ももっていない空っぽの状態だという事が分かるね!

では一体どうすれば、この状態のNPCインスタンスを
[たいが],[ゆうじ],[たくま],[ゆい] それぞれ4人の情報を持ったインスタンスに変えることができると思う??

そう!インスタンス変数の値を新しく代入しなおせばいいんだ!

方法は二つあって、1つ目はプログラムからインスタンスを作成した時に、直接インスタンス変数を変更する方法だよ!

例えばこんな風に

instance_create_layer()
instance_create_layerは[x,y座標の位置],[表示したいレイヤー]、[作成したいインスタンス] の4つの値を渡すことでインスタンスを、指定したレイヤー上の座標に作成してくれる
便利なメソッドだよ!何度も使うことになると思うから覚えておいてね!

上の画像の例では、まずtakumaという変数にinstance_create_layer()メソッドによって
作成された、インスタンスを代入しているんだ!

残りのプログラムは、takumaというインスタンス名に「.」をつけてインスタンス変数に
アクセスして値を再代入しているよ!

実際にこのプログラムを走らせてどうなるか見てみよう!

先ほど再代入した値を保持した、NPCインスタンス変数が表示されたよ!
残りの3人も同じようにinstance_create_layerメソッドを使って作成して
値を再代入することで、ゲームに登場させることができるんだ!

2つめは、ゲーム画面に設置したインスタンスの値を直接変更する方法だよ!

ゲーム画面(room内)に設置したNPCインスタンスをダブルクリックすると、

こんな風に、インスタンスについての情報が表示されるよ!

一番下にある”Creation Code”というボタンをクリックすると、
プログラムを書くことのできるエディターがでてくるよ!

このエディター内では全てのインスタンス変数にアクセス
することができるので、値を再代入してみよう!

エディター内で、変数を再代入しても画面上では何も変化がないけど、
ゲームを起動してみれば


しっかりと変数が変更されていることがわかるね!

takumaとyuiのどちらもNPCオブジェクトのインスタンスであるため、
後で[体重]という変数を追加する必要があっても、NPCオブジェクトに
新しい変数を宣言して、それぞれに値をセットするだけで済むんだ!

こんな風に似たようなオブジェクトを何度も作る時は、
大きなくくりでオブジェクトを作成するのが、ゲーム開発を円滑に
進めるうえでとても大切になってくるよ!

まとめ

最初は内容が難しくて、理解できないって人も多いと思う!
でも、最初から全てを理解する必要はなく、実際にゲームの
開発を進めていく中でおのずと理解も深まっていくとおいらは
思うよ!だから安心するんだ(‘ω’)

あと文字だと分かりづらいという人のためにもYouTubeで
解説動画を投稿するつもりだからチェックしてみてね!!

質問や、訂正があればいつでもコメントやツイッターで
受け付けているよ!

それではまた次の記事で会おう!
以上ゴッリラでした!

ゴッリラ
最後まで読んでくれてありがとう!
2+

コメントを残す

メールアドレスが公開されることはありません。

ABOUTこの記事をかいた人

このブログでは、初心者向けにGameMakerStudioを使ったゲームの作り方、プログラミングについての基礎知識を解説しているよ! "自分でゲームをつくってみたい!と思っている人は、是非読んでみてね!