時雨に舞う

プログラミングや技術情報などの備忘録

UnityのWebGL出力について

自社サービスのフロント部分をUnityで開発していた、ある日のこと。
(今年の3月あたりの話になります)
「ブラウザで動したらいいのでは?」という話が出てきました。
その時に調べた内容をメモとして残しておきたいと思います。

 

Unityで開発したものを、ブラウザで動作させる場合2つ方法があります。

・UnityWebPlayer

 こちらは、プラグインをブラウザにインストールして動かすタイプです。
 所謂Flashみたいなものですね。

WebGL

 言語はJavascriptで、ブラウザからGPUを操作し、Canvasに描画します。

 

今回はWebGLについてです。

 

実は、Unity5.3.3からWebGL出力ができるようになりました。
ただし、WebGL出力の機能はプレビュー版となっていて正式リリースではありません。
また、Unityの公式ページではモバイル端末は未サポートとなっています。
以下、Unity公式ページから抜粋になります。
http://docs.unity3d.com/ja/current/Manual/webgl-browsercompatibility.html

Unity WebGL コンテンツは現在モバイル端末ではサポートされていないことに注意してください。一部端末、特にハイエンドなものでは動くかもしれませんが、大抵の端末は性能不足で Unity WebGL を十分に動かすだけのメモリがありません。

 

早速、自社サービスで作成していたパズルゲームWebGL出力して、PC版Chromeで確認したところ、ほぼ完璧な動きをしていました。

問題は、Arialフォントの文字列が描画されないことくらいでした。

(Arial=動作環境のデフォルトフォント)
この問題は、Fontデータも一緒にビルドして組み込んだFontを使用することで解決します。
また、サーバー上に配置したアセットバンドルを読み込むことができます。

 

実は、自社サービスはスマートフォンがターゲットとなっています。
なので、PCで動いただけでは喜んでいられません。。。

 

さっそく、本命のAndroid版のChrome(Nexus5)で動作確認してみました。

 

・・・結果は、残念なことになりました。
動くこともあれば、動いたとしてもエラーも吐かずに固まってしまったり、
何も表示されないまま固まってしまうなど不安定な動きとなっていました。

Nexus5くらいの性能ならば動くと信じたかったのですが、残念です。


まとめとして、UnityのWebGLはPCブラウザで動作させるには問題がないことが解りました。PCのブラウザ向けにリッチなコンテンツを開発するのにむいているのではないでしょうか?

 

また、ざっくりとした説明になりますが、UnityのWebGL出力はemscriptenを使用しています。
emscriptenとは、c,c++からLLVM生成して、それをJavaScriptに変換するコンパイラになります。つまり、コンテンツをc,c++で開発をしておけば、PCアプリ、スマートフォンアプリ、Webアプリでも同じコードで済みます。
今後、emscriptenがWebアプリの開発にどう影響を与えていくか気になります。

 

最後に、UnrealEngine4でもWebGL出力が可能になっていましたので調べてみましが、結果はUnityと同様結果でスマートフォン環境では厳しいという結果になりました。

 

著者:ai

Data too long for column

mysqlにおいて、今まで問題無かった個所で突然「Data too long for column 'xxx'」エラーが発生するようになったら確認しておくこと。

sql_modeに「STRICT_TRANS_TABLES」を付けていると桁数があふれた時にエラーを返すようになる。今まで付けていなかったのに何らかの理由で付けた場合、今まで問題無かった個所でエラーが発生する事になる。

  • sql_modeの確認
mysql> SELECT @@GLOBAL.sql_mode;
+--------------------------------------------+
| @@GLOBAL.sql_mode                          |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
  • オンライン状態での変更
mysql> SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
  • my.cnfでの設定
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

著者:t.n

PHPでsoapライブラリを使ったときのハマりポイント・・・

先日、PHPsoapライブラリを利用して、ローカルに配置したwsdlを読み込んでの通信をテストしていたときのこと・・・ いくらwsdlファイルを更新しても接続先が変わりません・・・

何か変になっているのか、grepの検索範囲を広げながら確認していたところ、wsdlファイルのキャッシュが悪さしていたようです。

http://php.net/manual/ja/soap.configuration.php

デフォルトでは、ファイル形式で、24時間キャッシュされます。。。 ここにたどり着くまで長かった。。。というわけでメモしておきます!

さとう

bashrcを晒してみます。

余りにも更新していないので、私の .bashrcでも晒しておきますね。 特におもしろいことはしていませんが・・・

# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

alias db='ssh dbxxxx'

# colors
eval "`dircolors -b`"
alias ls='ls --color=auto'
alias sl='ls --color=auto'
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'

ついでに、 .vimrc です。

syntax on

set fileformats=unix,dos,mac
set backspace=indent,eol,start

set history=100
set ruler

highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=darkgray
match ZenkakuSpace / /

set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,euc-jp,cp932,iso-2022-jp
set fileencodings+=,ucs-2le,ucs-2,utf-8

set tabstop=4
set autoindent
set expandtab
set shiftwidth=4

さとう

UnityのAsset参照に関して

Unityで各プラットフォーム用にビルドすると関連するAssetが取り込まれます。

しかし、想定外のAssetが対象になってしまってサイズが肥大化する事があり、どうして対象となるのか調べる術を探していました。(一個ずつ見ていくのは無理…)

 

非常に参考になったのがこのサイト、本当にありがたいです。

esakun.hateblo.jp

 

Unityで管理しているAssetには全てguidが振られており、そのguidを保持する事で参照関係を保っているのですね。

まず、ビルドに含まれてしまっているAssetを特定(例えばC.png)し、そのファイルのメタファイル(C.png.meta的なやつ)をテキストエディタで開く。すると「guid: xxxxxxxx」という表記が2行目くらいにあるのでそれをコピー。

UnityプロジェクトのAssetフォルダ以下をgrep等のテキスト検索でサーチすると参照元を割り出す事ができます。(前提条件として、Unityファイルのテキスト出力は必須ですね)

 

ビルドに含まれる条件として以下が挙げられます(全てではないかもしれません)

・「Build Settings」の「Scenes In Build」でチェックが付いているシーンファイルで参照しているAsset、およびそのAssetが参照しているAsset、およびその・・・

・「Resources」フォルダ以下に入っているAsset、およびそのAssetが参照しているAsset、およびその・・・

 

要するに、ビルドに含まれてしまっているAssetのguidを参照しているAssetを探して、上記2パターンのどちらかに辿りつくはずなので、参照しないように変える。

例えば resources/A.prefab で参照している B.mat で参照している C.png 、という関係であれば、A.prefabで別のマテリアルを参照させるなど。

 

 

著者:t.n

WindowsでのNAT越えVPN

さて、だいぶ日が空きました。

たまに困ることをメモしておきます。

 

Windows環境では、NAT越えで IPsec/L2TP のVPNトンネルを貼ろうとするとうまく動作しません。

デフォルトではなぜか制限されており、レジストリの設定をすることでうまく動作するようになります。

MS.のKBはサーバ側の資料ですが、設定内容は同じですので、リンクを貼っておきます。

https://support.microsoft.com/ja-jp/kb/926179

たいしたことない変更ですが、誤って関係ないものを変更すると大変です。

レジストリ設定になれていない方はくれぐれも慎重に。

 

では、また。

 

さとう

Portfowarderの活用

お客さんの開発環境に接続して、その先にあるDBをグラフィカルに確認したい!

そんなことありませんか?

WebサーバにSSHでつないでそこからさらにDBに接続する程度なら、Windows環境では、Navicat単体で簡単に実現できますね。

Linux環境と違い、もう一段SSHを噛ますと途端に面倒になります。

こんな時、少し古いソフトになりますが、Portfowarderが便利です。

※組み込みのOpenSSLのバージョンが古いので、使用環境は選びましょう。

続きを読む