GameMaker

GameMaker Studioを一ヶ月触って

More than 1 year has passed since last update.

前置き

Qiita 初投稿です。タイトル通り GameMaker Studio というゲームエンジンを使って一ヶ月目の感想です。
Qiitaの下書きにいくつか溜まっていますが、どの記事書いていくと後半でだんだん疲れてきていつも投稿しないのでとりあえず、投稿します。

概要

GameMaker Studioとはゲームエンジンである。

日本ではほとんどシェアがないが、世界ではunityにつぐ第二位のシェアである。

イベントベースでかつ、GUIプログラミングが可能である。
(自分はコードで書いたほうが楽なので、最初の慣れないとき以外はコードで書いている。)

GameMaker Studioに使用される言語はいわゆる独自言語でGameMakerLanguage(GML)と呼ばれる。

環境

OS: macOS sierra
version: 2.1.0 (GameMaker Studio 2)
2Dゲームを作成

GameMaker Studioの簡単な紹介

Sprite, Object, Room などを作成してゲームを作っていく

  • Sprite: 画像を設定。
    (tips: 一つの画像から分割して取り込みたい(スプライトのシートをとりこみたい)場合は、 画像を編集 -> 選択するとアプリケーションメニューバーに Image, View, Effectというのが現れる → Image を選択 → Import Strip Image でOK)

  • Script: メソッド。GMLで独自のメソッドを定義するにはこれを使う必要がある。 argumentというbuilt-in変数で引数を指定できる。

  • Object: Create, Stepなどのイベントを持ったもの。また、spriteなど設定できる。

  • Room: Unityでいうところのシーンである。レイヤーがあり、そこにObjectを配置していく。

イベントとは

インスタンスが何かしら動作をトリガーにして何を実行するかを定義できる。

  • Create: インスタンスができたとき
  • Step: 毎フレームごとに実行
  • Mouse: マウスでクリック(など)したとき
  • Draw: 描写に関係する (Tips: スクリプトでdraw系のメソッド呼ぶ場合、drawというイベントに定義しないと描写できない)

言語の簡易の紹介

○変数のスコープ

  • local変数(黄色1): var キーワードをつける。 ひとつのスクリプト内

  • インスタンス変数(青): あるインスタンスが持つ変数(インスタンスとはオブジェクトが顕現したもの)

  • グローバル変数(紫): gloval.nameで定義できる。 

    • (tips: Arrayも使える。が、なぜか青で表示される)
    • キーワード glovalvar でもグローバル変数になるが今は非推奨
  • built-in変数(緑): 各インスタンスがもとから持つ特別な変数

○タイプ(よく使うもの)

  • 数字、文字、真偽値、enum (それぞれオレンジ)
  • 真偽値はtrueという名前の1を返す定数
  • enum はよくある列挙型で指定しなければ、0,1,…の値を返す。整数だけ可能 定数は、enumを使うのがよい。(tips:キーワードconstがあったりしない)

(tips: オレンジは定数を返す。スプライトやスクリプト、すべて定数値を返す、値はリソースの上から順に0, 1…となる)

○演算子
だいたいお馴染みのが使える。三項演算子も使用可能 (ver2.0)

○他

  • #macroというのが使える、c言語などのdefineと同じである(赤)
    (tips: 同じ名前のマクロを複数定義してもコンパイルエラーはでない)

  • エクステンションで外部スクリプト(例えばjs)が使用可能。また外部のjsからgmlのスクリプトを呼ぶこともできる

  • httpリクエストのメソッドも用意されている

エディターのおすすめショートカット

  • 定数にカーソルを合わしてFn1: 定義に飛べる。sprite, script, enum, macroなど(要するにオレンジ文字)が可能。
  • コマンド+t: Resourcesを検索
  • コマンド+f: 1script内の文字列検索
  • コマンド+shift+f:プロジェクト全体からの文字列検索

(tips: IDEのショートカットの変更はできない)

実際の実装において

  • ゲームの固定値(ちまたではマスターデータとか呼ばれているもの)は定数で管理したいのでenumを利用。
    また、arrayを使いたかったので、変更可能だが仕方なくグローバル変数で定義。

  • 変数名にはかなり気を使う必要がある。
    最近の言語では非推奨なことが多いがハンガリアン記法を使うしかない。
    接頭辞のscr, spr, rm, obj。定数は大文字など。
    (色や命名規則でどうにかやっていく必要がある。)

  • イベントはすべてスクリプトで書きやすいようにした。
    createイベントなら obj_hoge_create という名前のスクリプトを作って一行それを呼ぶ。
    他同様に、stepイベントは obj_hoge_step を作って呼ぶ。

  • データストラクチャで連想配列やリスト、スタックが使えるが、今回作っているプロジェクトでは2次元配列などでやりくりし、使わないことにした。

GMLの大雑把な感想

  • 型無しのお手軽に書ける言語である。クラスはない。ネームスペースなどもなし。

  • ファンクションが気軽に定義できず、必ずscript(一つのファイル)を作る必要がある(だるい)。(1ファイルに1メソッドということである。)

  • Unityでいうところのコルーチンが書きたくなるがあまりうまくできない。timelineで似たようなふうに書けるかもしれないが、まぁだるい。

  • 機能は多くなく、覚えることは少ない。

GMS全体の感想

guiでプログラミングができるというのは、ゲーム作り初心者にはありがたいかもしれないが、込み入ったことがしたくなると、どうしてもコードで書く必要になってくるかと思う。
言語自体の仕様は多くなく、覚えることは少ない。その点も初心者がとっつきやすいのかなと思う。
型がないということで、スピーディにシンプルな(あまり大きくない)ゲーム作りたいという場合に選ぶ動機になる…?
実はもともと画像編集ソフトだったらしく、画像編集ができる。



  1. 色が書いてある場合はIDEの表示色です