Unity内でMySQLを使う

How to get MySQL Connector/Net working with Unity 2017 | Code Dojo

上のサイトを参考にUnityでMySQLを直接使ってみました。英文なのでGoogle翻訳フル活用。英語読めるようになりたい。

まとめると、

C#用のMySQLドライバを、Unityにインポートすることの解説です。

最終的に成功したけど、よくわかんなかった……。

PHPとか使ってデータベースにアクセスする記事はあったけど、Unity内で直接使うのはあまり見なかったので書いてみます。

前提として、

  1. MySQLのデータベース自体は作成済み。
  2. C#のランタイムバージョンを4.xに。
  3. MySQLのDLL自体の詳細は公式のドキュメントとかで別途調べる。

ダウンロードと解凍

fw_error_www
fw_error_www

このサイトからDLLをダウンロードします。

Select Operating Systemを.NET&MONOにします。で、ダウンロード開始。

手ごろな場所に解凍して、UnityのPluginsフォルダにドロップします。

複数のDLLファイルがありますが、これ以外はエラーが出て読み込めませんでした。

データベースを使うだけなら、MySQL.data.dllだけあれば使えるので良しとすることに。

もしMySQL.dataも使えなかったら古いバージョンのMySQLドライバをダウンロードしてみる。

で、MySQL.data.dllをインポートすると

The type `System.Data.Common.DbConnection' has been forwarded to an assembly that is not referenced. Consider adding a reference to assembly `System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'

みたいなエラーが出る。

これを解決するために、

自分のPCの、<Unityをダウンロードしたフォルダ>\Unity\Hub\Editor\2018.2.13f1\Editor\Data\MonoBleedingEdge\lib\mono\unityjit

からSystem.Data.DllをPluginsフォルダに入れる。

こうすればとにかく使えました。

このSystem.Data.DLLがいろんなフォルダにあるんですが、unityjitフォルダ以下のやつじゃないとエラーになった……。

最終的にこんな感じのフォルダ構成になりました。

あとEdit➡ProjectSettings➡Player➡OtherSettingsから

ScriptingRuntimeVersionを4.xにしておく。

試しに使ってみる。

using System.Collections;
using System;
using System.Collections.Generic;
using UnityEngine;
using MySql.Data.MySqlClient;
public class NewBehaviourScript : MonoBehaviour {
    private void Start()
    {
        MySqlConnection con = new MySqlConnection("server=localhost;uid=root;pwd=mypass;database=tekito");
        
        try
        {
            con.Open();
            string sql = "Select * from tableName";
            MySqlCommand com = new MySqlCommand(sql, con);
            MySqlDataReader reader = com.ExecuteReader();
            while (reader.Read())
            {
                Debug.Log(reader[0]);
            }
            reader.Close();
        }catch(MySqlException e)
        {
            Debug.Log(e.ToString());
        }
        
        Debug.Log("");
    }
}

これでPHPとかを使わずにUnity内でMySQLを使えるようになりました。

しかし、.NETのバージョンも対応してると思うんだけど、どうしてMysql.data.entity.dllとかは使えないんだろう?

コメント

  1. よんいち より:

    こんにちは。
    unityで MySQLのDBに接続しようとしていて、ここにたどりつきました。
    書かれているコード、とても参考になりました!!
    が、
    「Exception」の箇所は
    「MySqlException」が正解ではないでしょうか?
    この箇所でコンパイルエラーがでたので、いろいろ検索していたら、
    C#からMySQLに接続する
    https://dianxnao.com/c%E3%81%8B%E3%82%89mysql%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B/
    このサイトの記述で解決しました。

    • げんとめ(管理人) より:

      ご指摘ありがとうございます。
      訂正しておきました。
      自分の環境でもコンパイル時にエラーが出てたのかもしれませんが、そのまま記事にしてしまったのかもしれません。
      惑わせてしまって申し訳ないです。

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