Unityで作ったゲームをMysqlに接続するための方法メモ

技術情報

Unityバージョン: 6

スマホ向けに作成したゲーム「足し算パズル」をWebGL化するために、ランキングデータ保存をFirebaseからレンタルサーバーに導入されているMysqlに変更しました。

ここでは、UnityでMysqlを接続するためにやったインストール手順などを紹介します。

先に言っておくと、この方法ではWebGL化してブラウザからMysqlに接続できませんでした。SteamのようなPC上で起動するゲームの場合、この方法で接続できる可能性があるので試してみてください。

WebGL化したゲームをブラウザからMysqlに接続する方法は別記事で書きたいと思います。

ライブラリ「MySqlClient」の導入

先に結論から言うと自分の環境の場合ライブラリ「MySqlClient」で接続することが出来ませんでした。このやり方を試してダメな場合「ライブラリをMySqlConnectorに変更」の項目をお試しください。

MySQLの公式サイトに行きコネクタをダウンロードする。

  1. 以下Mysql公式サイトにアクセス
    MySQL :: MySQL コネクタ
  2. NET Driver for MySQL (Connector/NET)の「ダウンロード」ボタンを押す
  3. プルダウンで「Source Code」を選択し容量が多い方の「ダウンロード」ボタンを押す
  4. MySQLにアカウントを登録したくない場合は「No thanks, just start my download.」を押すとダウンロードが始まる

Unityにファイルを配置

Unityプロジェクト内にダウンロードしたDLL一式を配置します。

  1. Asset直下にPluginsフォルダを作成
  2. Unityプロジェクトで使用している.NETバージョンのDLL一式を配置

※バージョン確認方法
編集→プロジェクト設定→プレイヤー→その他の設定→API互換性レベル

自分は「.NET Standard 2.1」で使用しているのでそのまま一致するDLL一式を入れられましたが、「.NTE Framework」を選んでいる場合、どれを入れればいいのかはイマイチわかっていません。
恐らくUnity2021以降のC#言語バージョンは9.0なのでUnity6も「net9.0」のDLLを入れれば良いと思いますが、定かでないので調べてみてください。

エラー発生

DLLを全部UnityのPluginsに入れたら以下のエラーが表示されました。

Assembly 'Assets/Editor/MySql.Data.dll' will not be loaded due to errors:
Unable to resolve reference 'Google.Protobuf'. Is the assembly missing or incompatible with the current platform?
Reference validation can be disabled in the Plugin Inspector.
Unable to resolve reference 'K4os.Compression.LZ4.Streams'. Is the assembly missing or incompatible with the current platform?
Reference validation can be disabled in the Plugin Inspector.
Unable to resolve reference 'BouncyCastle.Cryptography'. Is the assembly missing or incompatible with the current platform?
Reference validation can be disabled in the Plugin Inspector.

Nugetから以下3つを検索してインストール

Nugetパッケージマネージャーを開き、以下3つをインストールします。Nugetパッケージマネージャーが無い場合はこちらの記事で導入方法を紹介しています。

  • Google.Protobuf
  • K4os.Compression.LZ4.Streams
  • BouncyCastle.Cryptography
  1. Nugetパッケージマネージャーを開く
  2. Google.Protobuf
  3. K4os.Compression.LZ4.Streams
  4. BouncyCastle.Cryptography

3つをインストールするとエラーが消えます。

ローカルDBで接続確認

以下のコードをUnityのデバッグで実行。接続環境は「local by flywheel」を利用したローカル環境です。サーバー名やテーブル名などは変更してください。

using MySql.Data.MySqlClient;
using System;
using UnityEngine;

public class ConnectMysql : MonoBehaviour
{
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        string myConnectionString = "Server=サーバー名;" +
                                    "Database=DB名;" +
                                    "Port=ポート番号;" +
                                    "uid=ユーザー名;" +
                                    "pwd=パスワード";

        // DB接続
        using (var conn = new MySqlConnection(myConnectionString))
        {
            try
            {
                // 接続
                conn.Open();

                // sql文
                string sql = "SELECT * FROM テーブル名;";

                // SQLコマンド作成
                var cmd = new MySqlCommand(sql, conn);

                using (MySqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        // 出力
                        Debug.Log("name:" + dr["name"].ToString());
                    }
                    dr.Close();
                }
            }
            catch (Exception ex)
            {
                Debug.LogError("DB接続失敗:" + ex.Message);
            }
            finally
            {
                // 接続を辞める
                conn.Close();

            }
        }
    }
}

エラー発生

上記コードをデバッグ実行した結果「MySqlPoolManager」エラーが出ていました。
エラーが出た個所は、conn.Open()の所です。

ライブラリを「MySqlConnector」に変更

使用するライブラリを「MySqlConnector」に変更したところ、エラーが出ずにDB接続できるようになったので、こちらのやり方を紹介します。

NugetでMySqlConnectorをインストール

Nugetマネージャーを使用して、MySqlConnectorをインストールします。

usingを変更

usingを以下の通り変更します。

using MySql.Data.MySqlClient;

using MySqlConnector;

エラーが出ずに接続できた。

さいごに

この方法でUnityで製作したゲームからMysqlに接続できると思います。

結論から言うとWebGLの場合、ブラウザからMysqlを直接呼び出すことはできませんでした。調べた感じWebGLから直接DBを呼び出せるようにする場合は、セキュリティ的にも不味くなるみたいです。なので、ブラウザからMysqlにアクセスしたい時はPHPで作ったWebAPI経由でアクセスすることにしました。PHPを経由する方法は別記事で書きたいと思います。

この方法は、PCゲームとしてMysqlを接続したい時に、役立つと思ったのでメモ程度に残すことにしました!何か間違えてたら編集します!

 

コメント

タイトルとURLをコピーしました