毎月、UEマーケットプレイスでは、Epic Gamesが選出した5つのアセットが無料配布されています。 本記事では8月の無料アセットの1つ、『MySQL Integration』の内容とUnreal Engineへの導入方法について紹介します。
TEXT / wvigler
目次
「MySQL Integration」の概要
『MySQL Integration』はデータベース管理システム「MySQL」とUnreal Engineの連携をサポートするためのコードプラグインです。ブループリントからデータテーブルの作成、データの保存、データの取得などを簡単に行えます。
「MySQL」とは
MySQLはOracleの開発している無料のオープンソースデータベース管理システムです。「SQL」というデータベース管理のための言語を使って命令文(クエリ)を送ることで、直感的かつ柔軟にデータの操作、管理を行うことができます。
オープンソースのものでは世界で現在最も人気のあるデータベース管理システムであり、YouTube、Twitter、facebook、NETFLIXなどの有力サービスでも使用されています。
MySQLに限らず、データベース管理システムは基本的にクライアント/サーバーモデルというシステムを採用しています。
これはネットワークにつないでいるマシン(主にパソコン)同士を「サーバー」と「クライアント」に2つの役割を分け、お互いの間で情報のやりとりをするというものです。
MySQLではクライアントはサーバーにクエリと呼ばれる命令文を送り、サーバーはそれに応じてデータを提供します。
MySQLではサーバー側はデータを管理するために、「データベース」という形でデータを保存しています。これは1つのサーバーに複数作ることができます。
データベースの中にはさらに小さな単位として「データテーブル」というものがあります。これも1つのデータベースに複数作ることができます。
データテーブルの構造は例えば下記のような、表計算ソフトなどで作られた表によく似ています。
表の横の行を「レコード」と呼びます。下の表では、5人分のデータ=5件のレコードが格納されています。
5件のレコードにはそれぞれ番号・苗字・名前・生年月日・年齢・性別・点数のデータがあり、苗字の列を縦に見ると相田・伊藤・井出・小川・加藤という文字列が入っています。この縦の列のことを「カラム」と呼びます。
MySQLの全体構造についてざっくりとしたイメージは掴めたでしょうか?
最初のうちはこのようなデータベースがどのようにゲーム作りの役に立つのか、想像がつきにくいかもしれません。例えば、武器の名前・強さ・射程・金額を並べたリストデータ、ユーザーのセーブデータ、ソーシャルゲームで運営チームがユーザーの行動を解析するためのログデータなどで使われています。
「MySQL Integration」を試してみよう
次は、MySQL Integrationのサンプルプログラムを使って、MySQLがどのようなものか体験してみましょう。サンプルはこちらからダウンロードできます。
サンプルプログラムはMySQL Integrationのプラグインがインストールされていないと動かないので、こちらも忘れずエンジンにインストールしておきましょう。
このプラグインは基本的にネットワークを通して使用するものですので、ここからの作業は基本的にインターネットに接続した状態で行うことを想定しています。
サンプルプログラムを解凍して、中にある「MySQLIntegration.uproject」を開くと、このような画面が表示されます。
ここでプレイボタンを押すとサンプルプログラムが起動します。まずはアクセスするデータベースを設定をするための画面が出てきますが、とりあえず何も変更せずに「Login」のボタンを押しましょう。初期設定では「db4free.net」というMySQLのテストサーバー内の「testdbue」というサンプル用データベースにアクセスする設定になっています。
アクセスしてから時間が経つとサーバーとの接続が切れてしまう場合があるので、その場合はここからやり直しましょう
少し待つと、このような画面へと移行します。ここでは下のボタンを押すことで、上に書かれているクエリをサーバーに送ることができます。
testdbueのデータベースには誰でもアクセスできるので、データベースの状態はその時によって変わってしまいます。まずはデータテーブルを削除して、状態を揃えましょう。
「Delete Table」ボタンを押すと、データテーブルを削除するクエリがサーバーに送られます。
今度は「Create Table」のボタンを押し、データテーブルを新しく作成します。これには’id’、’code’、’discord’、’hwid’、’active’、’uses’、’lastUse’、’date’、’amount’といったカラムがあらかじめ定義されています。
肝心のデータを追加していきます。サンプルには最初からデータのテンプレートが用意されているので使っていきましょう。「Insert Data」を押すと用意されたデータをサーバー側に追加できます。
「Insert Data(Multi Queries)」でもデータを追加することができます。こちらは複数のクエリを同時に送信するサンプルになっています。
オリジナルのデータテーブルを作ってみよう
それでは、サンプルプログラムを使ってさきほど挙げたこの表を基にしてデータテーブルを作成してみましょう。
新しいデータテーブルを作るのですが、デフォルトで用意されているものとはカラムの構成が違うため、クエリを変更する必要があります。
「Create Table」の上のクエリ文を以下のように変更します。
「`」「’」「,」などを間違えないように注意しましょう。
また、今回は説明のために「生徒」「番号」といった日本語の名称を使っていますが、環境によっては正しく動かない可能性もあるため、テーブル名やカラム名は1byte文字で作成したほうがよいでしょう。
CREATE TABLE `生徒` (
`番号` int NOT NULL,
`苗字` text NOT NULL,
`名前` text NOT NULL,
`生年月日` date NOT NULL,
`年齢` int NOT NULL,
`性別` boolean NOT NULL,
`点数` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci;
CREATE TABLE `生徒` (
`番号` int NOT NULL,
`苗字` text NOT NULL,
`名前` text NOT NULL,
`生年月日` date NOT NULL,
`年齢` int NOT NULL,
`性別` boolean NOT NULL,
`点数` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci;
この状態で「Create Table」を押せば新しいデータテーブルを作ることができます。
終わったら「Select Data」のクエリ文を
Select * from 生徒
に変更してボタンを押し、カラムが登録されているかどうか確認しておきましょう。
次にデータを入力します。「Insert Data」のクエリを以下のように変更します。
INSERT INTO `生徒` (`番号`, `苗字`, `名前`, `生年月日`,`年齢`, `性別`, `点数`) VALUES
(1, '相田', '陽介', '2005-03-06', 17, 1, 52),
(2, '伊藤', '真理', '2005-07-04', 17, 0, 86),
(3, '井出', '進', '2006-02-19', 16, 1, 68),
(4, '小川', '紗枝', '2005-10-6', 16, 0, 72),
(5, '加藤', '幸助', '2005-04-11', 17, 1, 38);
INSERT INTO `生徒` (`番号`, `苗字`, `名前`, `生年月日`,`年齢`, `性別`, `点数`) VALUES
(1, '相田', '陽介', '2005-03-06', 17, 1, 52),
(2, '伊藤', '真理', '2005-07-04', 17, 0, 86),
(3, '井出', '進', '2006-02-19', 16, 1, 68),
(4, '小川', '紗枝', '2005-10-6', 16, 0, 72),
(5, '加藤', '幸助', '2005-04-11', 17, 1, 38);
「Insert Data」を押すとデータを追加できます。確認もしておきましょう。
MySQLの基本的な機能として特定の条件でデータの絞り込みやソートも試してみましょう。
例えばこの中で点数が60より上の生徒を見たい場合は「Select Data」のクエリ文をこのように変更します。
Select * from 生徒 where 点数 > 60
Select * from 生徒 where 点数 > 60
ボタンを押してクエリを送ると、点数が60より上の生徒のデータのみが表示されます。
生年月日順に並べたい場合は、次のようなクエリを送ります。
Select * from 生徒 order by 生年月日
Select * from 生徒 order by 生年月日
MySQLでは、ここで紹介した以外にもさまざまなクエリを利用することができます。MySQLのクエリについてさらに詳しく知りたい方はMySQLのドキュメントをご確認下さい。
最後に、試し終わったらデータテーブルを削除しておきましょう。「Delete Table」の上にこのようなクエリ文を書きます。
DROP TABLE 生徒
DROP TABLE 生徒
このクエリを送れば「生徒」のデータテーブルを削除することができます。
サンプルプログラムの中身を見てみよう
このプラグインのコア部分についてはC++で書かれていますが、サンプルプロジェクトではブループリントで多くの部分が書かれています。
これらのノードを使って、ぜひ自分のプロジェクトでもMySQLを使ってみましょう!
注意:サンプルプロジェクト以外でこのプラグインを利用するには「libcrypto-1_1-x64.dll」、「libssl-1_1-x64.dll」、「mysqlcppconn-9-vs14.dll」という3つのDLLファイルが必要です。これはサンプルプロジェクトのBinaries\Win64というフォルダに収められていますので、もし必要な場合はこちらからコピーしましょう
発展編:自分のサーバーとデータベースを作ろう
今までアクセスしていた「db4free.net」はあくまでテスト環境のサービスのため、意図せずデータが削除されたりサーバーが停止したりしてしまう可能性があり、本番環境で使用するには不向きです。
ここでは新たに自分のパソコンをデータベースを持つサーバーとして設定し、サンプルプログラムでアクセスしてみましょう。
MySQLを使用するシチュエーションとしてLinux環境であることが多いのですが、ここではWindowsでの導入に絞って解説します
まずはMySQLの公式サイトへと行き、ダウンロードページから「MySQL Community (GPL) Downloads »」をクリックします。
次に「MySQL Installer for Windows」をクリックすると、ダウンロードするインストーラーを選択するページが出てきます。ここでは上の方の「Download」ボタンをクリックします。
続いてこのようなページが表示されます。ここではOracleアカウントでのアクセスを勧められていますが、今回は特に必要ないので下の「No thanks, just start my download.」をクリックします。
これでインストーラーのダウンロードが開始されます。ダウンロードしたmysql-installer-web-community-~.msiというファイルをダブルクリックで実行します。
ユーザーアカウント制御の認証が行われた後にインストーラーの画面が表示されます。ここでは「Developer Default」にチェックを付け「Next」を選択します。
次にインストールするパッケージを確認する画面となります。こちらもそのまま「Execute」のボタンを押します。
続いてMySQLの設定に移ります。ここは基本的には初期設定のまま「Next」や「Execute」を押していけば大丈夫ですが、一箇所だけパスワード設定を求められる場所があるので注意しましょう。
これ以降はMySQL Routerというミドルウェアの設定なりますが、今回は特に必要ないので「Cancel」を押して終了させましょう。
この時点でこのパソコンはサーバーとして使えるようになっていますが、サンプルプログラムでアクセスするにはデータベースも必要なので、これもあらかじめ作成します。
Windowsのスタートメニューを展開すると、新しく「MySQL ?? Command Line Client(以下、コンソール)」というプログラムがあるはずです。これを起動しましょう。
黒い画面が出てきてパスワードを求められるので、さきほど設定したパスワードを入力しましょう。
サーバー(この場合自分のパソコンですが)にアクセスできました。ここではサンプルプログラムと同じくサーバーにクエリを送ることができ、それによって新しくデータベースを作ることができます。
以下のようにクエリを入力し、Enterを押しましょう。
CREATE DATABASE gamemakersdb;
CREATE DATABASE gamemakersdb;
これで「gamemakersdb」という名前のデータベースが作られました。もちろんデータベースは自分で好きな名前を付けることができますが、同じ名前のデータベースは作れないので注意しましょう。
データベースがしっかりと作られているか調べてみます。このようなクエリを入力するとデータベース一覧を出すことができます。
SHOW DATABASES;
SHOW DATABASES;
デフォルトで用意されているデータベースに混じって、「gamemakersdb」がしっかりと作られていることが分かります。
データベースを作れたことは確認できたので、サンプルプログラムの方に戻ります。起動すると前に起動した時と同様にこの画面から始まります。
書かれている項目を以下のように変更します。
全てが設定されていれば、前回と同じく問題なくデータベースに入れるはずです。
コンソールでアクセスしているデータベースとサンプルプログラムでアクセスしているデータベースが同じものであるかを確認しましょう。前と同じように「Create Table」で「codes_test」のデータテーブルを作成し、「Insert Data」でデータを入力します。「Select Data」で中身を確認すれば、データが入力されていることが分かります。
次にコンソールに戻り、データベースにアクセスします。コンソールでは「gamemakersdb」のデータベースには以下のようなクエリを入力すればアクセスすることができます。
USE gamemakersdb;
USE gamemakersdb;
「Database changed」と表示されたら、「codes_test」の中身を表示させます。クエリ文はサンプルプログラムとほとんど同じです。
SELECT * FROM codes_test;
SELECT * FROM codes_test;
するとコンソール側では何もしていないのに、「codes_test」にデータが入力されていることが確認できます。
サンプルプログラム側と見比べてみると、全く同じデータが返ってきていることが分かります。これは別々のプログラムに同一のサーバーからデータが送られたことを示しています。
さて、これで自分のサーバーを立てることができました。ゲームで使用するようなサーバーを立てるにはまだいろいろなことをする必要がありますが、これはその最初の一歩となります。
MySQLのようなデータベース管理システムを、あなたのゲームでも活用してみましょう!
『MySQL Integration』ダウンロードページ『MySQL Integration』公式ドキュメントアンリアルエンジンにハマり、ぷちコンでゲーム作ってた男。映像編で2連覇したことも。
昔はよくアーケードゲームとかやってました。
一番やり込んだのは「ケツイ ~絆地獄たち~」「戦国BASARAX」あたり。ローグライトゲームとかも好きです。
関連記事
注目記事ランキング
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
連載・特集ピックアップ
西川善司が語る“ゲームの仕組み”の記事をまとめました。
Blenderを初めて使う人に向けたチュートリアル記事。モデル制作からUE5へのインポートまで幅広く解説。
アークライトの野澤 邦仁(のざわ くにひと)氏が、ボードゲームの企画から制作・出展方法まで解説。
ゲーム制作の定番ツールやイベント情報をまとめました。
CEDEC2024で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブル2024で行われた講演のアーカイブ動画・スライドをまとめました。
CEDEC2023で行われた講演レポートをまとめました。
東京ゲームショウ2023で展示された作品のプレイレポートやインタビューをまとめました。
UNREAL FEST 2023で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブルで行われた講演のアーカイブ動画・スライドをまとめました。
UNREAL FEST 2022で行われた講演レポートやインタビューをまとめました。
CEDEC2022で行われた講演レポートをまとめました。