Unityでwebsocketを使用する方法は、多くの記事に書かれています。
UnityでWebSocketを使用する
などの記事をご参照ください。
本記事ではMonoDevelopでなくVisualStudioを使用しております。
多くの記事ではwebsocket-sharpを使用していますが、C#でサーバーやクライアントの処理を書いた際にUnity側でerror CS0246: The type or namespace WebSocketSharp could not found. Are you missing an assembly reference?
というエラーが出ることがあります。その時の対処法についてです。
エラーメッセージ
-
UnityのConsoleで
error CS0246: The type or namespace WebSocketSharp could not found. Are you missing an assembly reference?
やerror CS0246: The type or namespace WebSocket could not found. Are you missing an assembly reference?
がでる。 -
Assets配下、もしくはAssets/Plugins配下にあるwebsocket.sharpファイル(これは
websocket-sharp/bin/Release/websocket-sharp.dll
ファイルをUnityにインポートしたファイルです)をInspectorで見た際、Plugin targets .NET 4.x and is marked as compatible with Editor, Editor can only use assemblies targeting .NET 3.5 or lower, please unselect Editor as compatible platform
がでる。
解決法
エラーの原因は.NETのバージョンが異なっていることです。どうやら.NET 4.x と.NET 3.5以下は全く別の種類らしく、websocket-sharpでは.NET 3.5以下を使用する必要があるそうです。そこでもう一度dllファイルを.NET 3.5形式で作り直します。
- GitHubからもう一度websocket-sharpをダウンロードし、解凍。
- websocket-sharp-master配下のwebsocket-sharp.slnを開く、その後いくつかのポップアップメッセージの後に 、
ターゲットを .NET Framework 4.5 に変更する。
、.NET Framework <バージョン> のターゲット パックをダウンロードします。プロジェクトは変更されません。
、プロジェクトをロードしない。
の3つの選択肢が出てくると思います。その時に.NET Framework <バージョン> のターゲット パックをダウンロードします。プロジェクトは変更されません。
を選択します。 - 検索エンジンが開き、.NETのページが開くと思います。その場所で**.NET Framework 3.5 SP1**を選択し、ダウンロードします。このダウンロードには少し時間がかかります。
- .NET 3.5がダウンロードできたら、もう一度websocket-sharp.slnを開きます。するとそのままポップアップメッセージがでることなく開けると思うので、ソリューションエクスプローラーからExample系4つを削除し、Releaseモードにしてデバッグを行います。
-
websocket-sharp/bin/Release/websocket-sharp.dll
ができると思うので、そのファイルをUnityのAssets配下もしくはAssets/Plugins配下にインポートします。そうすると問題なくUnityで実行できるようになるはずです。