【メモ】Emscripten 1.35.0 以降のバージョンの使用

Unity5.5以降 emscripten のバージョンが更新されたため、
Unity5.4用にビルドした .bc が利用できなくなった。

Unity 5.4.5f1 : emscripten 1.34.1
Unity 5.5.0f3 : emscripten 1.36.7
Unity 5.6.1f1 : emscripten 1.37.3
Unity 2017.1.0f3 : emscripten 1.37.3
// <Unityのインストールパス>/Editor/Data/PlaybackEngines/WebGLSupport/BuildTools/Emscripten/emscripten-version.txt に記載されます。

となっています。

emsdk list --old

で以上バージョンが表示されません。(install候補になっていません)

Emscripten SDK (emsdk) — Emscripten 1.37.18 documentation

emsdk install git-1.8.3
emsdk update

実行して git から 開発バージョンをインストールできるようになります。

※プリコンパイルされてないバージョンのインストールは結構時間掛かります。

編集履歴

20170820:Unity2017.1.0f3のバージョンを追記しました

【C#】Server/Client サンプル

MMORPG ゲームサーバープログラミング】
第2章チャットサーバーを参考にServer/Client実装するサンプルです。

MMORPGを作りたくてサーバプログラミングを調べたら
ネット上のサンプルでは

  1. Client->Serverに送信
  2. Serverが受信する
  3. Server->Client送信
  4. ソケット切断

のが多くて、MMORPGではの解説が少なかった。

この本では、

  1. 受信用スレッド
  2. 送信用スレッド
  3. 同期用スレッド
  4. サーバー間の通信スレッド

4つスレッドを分けて負荷分散する方法を紹介されました。

少し古い本(2005年)なので、記載されたサンプルは C言語 で書かれてました。
Unityとロジック共有したいため、今回はC#にアレンジします

※読みやすくするため一部コードは省いてます。(いつか解説します。

Session

Client -> Server 接続後、Server側がClientの接続情報を保持するクラスです
gist.github.com

Command

受信したデータを解析し、プロトコールの種類やシリアライズ済のデータを保持するクラスです
gist.github.com

Server

チャットサーバーです。
やってること

  1. Main関数には TcpListener を初期化と送受信スレッドを生成する
  2. 各スレッドは while(true) を使ってループし処理を実行する

gist.github.com

Client

フロントエンドです
Unityを使ってます
gist.github.com

最後に

本を読んでワクワクしてプログラムを組んで動いたら
誰かと共有したくて駆け足でこのエントリを書きました。

気付いたことやアドバイスなど、ぜひコメントください~

【Advent Calender 2016】Milkcocoa + UnityWebGL

この記事は Milkcocoa Advent Calender 2016 18日目の記事です。

そろそろクリスマスなのに、
夏休みの課題のように、
最後の最後までコード1行も書いてませんでした!
当然な結果、進捗は全然ダメでした(/ω\)

とりあえず、ミルクココアでも飲んで落ち着こう。
f:id:kou_yeung:20161217171253j:plain

Milkcocoaとの出会い

2014年にMilkcocoaを知り、
javascript 数行だけでリアルタイム通信できることに驚きました。

その年にはTypeScriptという楽しみもあって、
PPAPのように ummm(ウーン)した結果
MilkcocoaとTypeScript を合体しました。

今年のお題はなんと Milkcocoa と UnityWebGLを合体してみた!!
(タイトルにはすでにバレてると思いますが・・・)

まずは成果物です

http://kou-yeung.mygamesonline.org/Milkcocoa/

もし、
画面上に赤いボックスがあったら、
それはあたなのプレイヤーオブジェクトです。
方向キーでボックスを動かせるぞ!!(それ以上のことができません)

もし、
画面上に白いボックスがあったら、
それは他のユーザだ。

もし、
その白いボックスが動いたとしたら
それはMilkcocoaのお陰だ。

もし、
何も表示されなかったら
おそらく[今日の配信メッセージ数]の上限を超えただけだ
明日またリトライしてください。

使い方

gist.github.com
Javascriptとそれほど変わりません。

ビルドできるプロジェクトはGitHubにアップしています

github.com

自分のプロジェクトに組み込みたい場合、
Assets/Plugins をコピーして使用してください。

最後に

二年ぶりMilkcocoaを使ってみてAPIもそれほど変わってないし、使いやすいです。
f:id:kou_yeung:20161218041500p:plain
にわかMilkcocoaユーザの私でも参加できますか?
楽しみにしてます(*'▽')

読みにくい文章ですが、
この記事で何か得られたら幸いです~

【C#】 Lazy<T> ( 遅延初期化 ) クラス

.NET4.0に追加された Lazy ( 遅延初期化 ) クラスをUnityで使いたいので書いた。
gist.github.com

追記

2016/12/02
string 型だと、パラメータ受け取らないコンストラクタがないため、
where T : new() を削除し、
上記修正とともに () => new T(); も () => default(T) にしました。