チラ裏Unity 主にUnityについての備忘録ですが誰か様の為になれば 2015-08-28T17:55:13+09:00 hwks Hatena::Blog hatenablog://blog/12921228815725815739 Ruby on Rails の開発環境構築 hatenablog://entry/6653458415119211111 2015-08-28T17:55:13+09:00 2015-08-28T17:55:57+09:00 オンラインゲームを作ろうと思った場合に必要なサーバ構築 その1つの手段として Ruby on Rails を選んだ際の開発環境構築メモ 環境 OS X 10.10.5 Xcode をインストール https://developer.apple.com/xcode/ にアクセス View in Mac App Store を押下して App Store よりダウンロード&インストール Xcodeを起動し、Preferences->Downloads より Command Line Tools をインストール HomeBrew をインストール http://brew.sh/ 公式サイトのものをコピ… <p>オンラインゲームを作ろうと思った場合に必要なサーバ構築</p> <p>その1つの手段として <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby%20on%20Rails">Ruby on Rails</a> を選んだ際の開発環境構築メモ</p> <p> </p> <p><span style="text-decoration: underline;"><strong>環境</strong></span></p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/OS%20X">OS X</a> 10.10.5</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a> をインストール</strong></span></p> <ol> <li><a href="https://developer.apple.com/xcode/">https://developer.apple.com/xcode/</a> にアクセス</li> <li>View in <a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/App%20Store">App Store</a> を押下して <a class="keyword" href="http://d.hatena.ne.jp/keyword/App%20Store">App Store</a> よりダウンロード&インストール</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>を起動し、Preferences-&gt;Downloads より Command Line Tools をインストール</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>HomeBrew をインストール</strong></span></p> <p><a href="http://brew.sh/">http://brew.sh/</a></p> <ol> <li>公式サイトのものをコピペ実行<br />$ <a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a> -e "$(<a class="keyword" href="http://d.hatena.ne.jp/keyword/curl">curl</a> -fsSL <span data-unlink>https://raw.githubusercontent.com/Homebrew/install/master/install</span>)"</li> <li>$ <a class="keyword" href="http://d.hatena.ne.jp/keyword/brew">brew</a> update</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a>-build と rbenv のインストール</strong></span></p> <ol> <li>$ <a class="keyword" href="http://d.hatena.ne.jp/keyword/brew">brew</a> install <a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a>-build</li> <li>$ <a class="keyword" href="http://d.hatena.ne.jp/keyword/brew">brew</a> install rbenv</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a> のインストール</strong></span></p> <p>rbenv のバージョン切り替え昨日を確認するため、2.1.x と 2.2.x をインストール</p> <ol> <li>$ rbenv install 2.2.3<br />$ rbenv install 2.1.7</li> <li>$ vi ~/.<a class="keyword" href="http://d.hatena.ne.jp/keyword/bash">bash</a>_profile <blockquote>export PATH="$HOME/.rbenv/bin:$PATH"<br />eval "$(rbenv init -)"</blockquote> </li> <li>$ source ~/.<a class="keyword" href="http://d.hatena.ne.jp/keyword/bash">bash</a>_profile</li> <li>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a> のバージョンを2.2.3に切り替える)<br />$ rbenv global 2.2.3</li> <li>(バージョンが切り替わったことを確認)<br />$ <a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a> -v<br /><a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a> 2.2.3p173 (2015-08-18 revision 51636) [<a class="keyword" href="http://d.hatena.ne.jp/keyword/x86">x86</a>_64-darwin14]</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby%20on%20Rails">Ruby on Rails</a> のインストール</strong></span></p> <ol> <li>gem install <a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a> --version="4.0.8"</li> <li>rbenv rehash</li> <li>(インストールされたことを確認)<br />$ <a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a> -v<br /><a class="keyword" href="http://d.hatena.ne.jp/keyword/Rails">Rails</a> 4.0.8</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby%20on%20Rails">Ruby on Rails</a> の動作確認</strong></span></p> <ol> <li>$ <a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a> new sample</li> <li>$ cd sample</li> <li>$ <a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a> g controller users index</li> <li>$ vi app/controllers/users_controller.rb <blockquote>class UsersController &lt; ApplicationController<br />  def index<br />    personal = {'name' =&gt; '<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>', 'old' =&gt; 28}<br />    render :<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a> =&gt; personal<br />  end<br />end<br /><br /></blockquote> </li> <li>$ <a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a> server</li> <li><span data-unlink>http://0.0.0.0:3000/users/index</span> が<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>レスポンスを返す</li> </ol> <p> </p> hwks UnityでSocket.IO hatenablog://entry/8454420450096201945 2015-06-06T03:33:53+09:00 2015-06-06T12:16:48+09:00 目標 Unity から socket.io に接続 環境 Unity 5.0.2f1 Personal OS X 10.10.3 node.js のインストール http://nodejs.org/ http://nodejs.org/download にアクセス Mac OS X Installer (.pkg) をダウンロードしてインストール socket.io モジュールのインストール http://socket.io/ $ npm install -g socket.io@0.9.17 -gでグローバルにインストール 必要であればsudo付で実行 後述のUnitySocketIOが1.… <p><span style="text-decoration: underline;"><strong>目標</strong></span></p> <ul> <li>Unity から socket.io に接続</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>環境</strong></span></p> <ul> <li>Unity 5.0.2f1 Personal</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/OS%20X">OS X</a> 10.10.3</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>node.js のインストール</strong></span></p> <p><a href="http://nodejs.org/">http://nodejs.org/</a></p> <ol> <li><a href="http://nodejs.org/download">http://nodejs.org/download</a> にアクセス</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac%20OS%20X">Mac OS X</a> Installer (.pkg) をダウンロードしてインストール</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>socket.io モジュールのインストール</strong></span></p> <p><a href="http://socket.io/">http://socket.io/</a></p> <ol> <li>$ npm install -g socket.io@<span style="color: #ff0000;"><strong>0.9.17</strong></span><br /> <ul> <li>-gでグローバルにインストール</li> <li>必要であればsudo付で実行</li> <li>後述のUnitySocketIOが1.x以降に対応していない?ため0.9.xを指定</li> </ul> </li> <li>以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>を追加 <blockquote>export NODE_PATH=/usr/local/lib/node_modules</blockquote> </li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>UnitySocketIO のインストール</strong></span></p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="NetEase/UnitySocketIO" src="//hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2FNetEase%2FUnitySocketIO" frameborder="0" scrolling="no"><a href="https://github.com/NetEase/UnitySocketIO">NetEase/UnitySocketIO<cite class="hatena-citation"></cite></a></iframe></p> <ol> <li>$ git clone <a href="https://github.com/NetEase/UnitySocketIO.git">https://github.com/NetEase/UnitySocketIO.git</a></li> <li>SocketIO/bin/Debug 以下の全 dll ファイルを Unity プロジェクトの /Assets/Plugins ディレクトリにコピー</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>socket.io サーバを立ち上げる</strong></span></p> <ol> <li> 以下のような socket.io 用サーバ js ファイルを適当な場所に作成<br />$ vi server.js <blockquote>var io = require('socket.io').listen(8080);<br /><br />io.on('connection', function (socket) {<br />  socket.send('connect.');<br />  socket.emit('emit', 'emit.');<br /><br />  socket.on('message', function (data) {<br />    console.log('message data is ... ' + data);<br />  });<br /><br />  socket.on('emit', function (data) {<br />    console.log('emit data is ... ' + data);<br />  });<br /><br />  socket.on('disconnect', function () {<br />    console.log('disconnect.');<br />  });<br />});</blockquote> </li> <li>$ node server.js</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>socket.io クライアントをUnityで立ち上げる</strong></span></p> <ol> <li>以下のような<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を適当なGameObjectにアタッチして実行 <blockquote><span style="font-family: Menlo;"><span style="font-size: 80%;"><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">;</span></span><br /><span style="font-size: 80%;"><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">SocketIOClient</span><span style="color: #444444;">;</span></span><br /><br /><span style="font-size: 80%;"><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #009695;">class</span><span style="color: #444444;"> </span><span style="color: #444444;">SampleSocketIO</span><span style="color: #444444;"> : </span><span style="color: #3363a4;">MonoBehaviour</span><span style="color: #444444;"> {</span></span><br /><br /><span style="font-size: 80%;"><span style="color: #444444;">    </span><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #444444;">SocketIOClient</span><span style="color: #444444;">.</span><span style="color: #444444;">Client</span><span style="color: #444444;"> </span><span style="color: #444444;">client</span><span style="color: #444444;">;</span></span><br /><br /><span style="font-size: 80%;"><span style="color: #444444;">    </span><span style="color: #3363a4;">void</span><span style="color: #444444;"> </span><span style="color: #444444;">OnGUI</span><span style="color: #444444;">() {</span></span><br /><span style="font-size: 80%;"><span style="color: #444444;">        </span><span style="color: #009695;">if</span><span style="color: #444444;"> (</span><span style="color: #3363a4;">GUILayout</span><span style="color: #444444;">.</span><span style="color: #444444;">Button</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Connect</span><span style="color: #f57c00;">"</span><span style="color: #444444;">)) {</span></span><br /><span style="font-size: 80%;"><span style="color: #444444;">            </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">client</span><span style="color: #444444;"> = </span><span style="color: #009695;">new</span><span style="color: #444444;"> </span><span style="color: #444444;">Client</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;"><a href="http://127.0.0.1:8080">http://127.0.0.1:8080</a></span><span style="color: #f57c00;">"</span><span style="color: #444444;">);</span></span><br /><span style="font-size: 80%;"><span style="color: #444444;">            </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">client</span><span style="color: #444444;">.</span><span style="color: #444444;">On</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">connect</span><span style="color: #f57c00;">"</span><span style="color: #444444;">, (</span><span style="color: #444444;">message</span><span style="color: #444444;">) =&gt; {</span></span><br /><span style="color: #444444; font-size: 80%;">            });</span><br /><span style="font-size: 80%;"><span style="color: #444444;">            </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">client</span><span style="color: #444444;">.</span><span style="color: #444444;">On</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">message</span><span style="color: #f57c00;">"</span><span style="color: #444444;">, (</span><span style="color: #444444;">message</span><span style="color: #444444;">) =&gt; {</span></span><br /><span style="font-size: 80%;"><span style="color: #444444;">                </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #444444;">message</span><span style="color: #444444;">.</span><span style="color: #444444;">MessageText</span><span style="color: #444444;">);</span></span><br /><span style="color: #444444; font-size: 80%;">            });</span><br /><span style="font-size: 80%;"><span style="color: #444444;">            </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">client</span><span style="color: #444444;">.</span><span style="color: #444444;">On</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">emit</span><span style="color: #f57c00;">"</span><span style="color: #444444;">, (</span><span style="color: #444444;">message</span><span style="color: #444444;">) =&gt; {</span></span><br /><span style="font-size: 80%;"><span style="color: #444444;">                </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #444444;">message</span><span style="color: #444444;">.</span><span style="color: #444444;">MessageText</span><span style="color: #444444;">);</span></span><br /><span style="color: #444444; font-size: 80%;">            });</span><br /><span style="font-size: 80%;"><span style="color: #444444;">            </span><span style="color: #444444;">client</span><span style="color: #444444;">.</span><span style="color: #444444;">Connect</span><span style="color: #444444;">();</span></span><br /><span style="color: #444444; font-size: 80%;">        }</span><br /><br /><span style="font-size: 80%;"><span style="color: #444444;">        </span><span style="color: #009695;">if</span><span style="color: #444444;"> (</span><span style="color: #3363a4;">GUILayout</span><span style="color: #444444;">.</span><span style="color: #444444;">Button</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Send</span><span style="color: #f57c00;">"</span><span style="color: #444444;">)) {</span></span><br /><span style="font-size: 80%;"><span style="color: #444444;">            </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">client</span><span style="color: #444444;">.</span><span style="color: #444444;">Send</span><span style="color: #444444;">(</span><span style="color: #444444;">System</span><span style="color: #444444;">.</span><span style="color: #444444;">DateTime</span><span style="color: #444444;">.</span><span style="color: #444444;">Now</span><span style="color: #444444;">.</span><span style="color: #444444;">ToString</span><span style="color: #444444;">());</span></span><br /><span style="color: #444444; font-size: 80%;">        }</span><br /><br /><span style="font-size: 80%;"><span style="color: #444444;">        </span><span style="color: #009695;">if</span><span style="color: #444444;"> (</span><span style="color: #3363a4;">GUILayout</span><span style="color: #444444;">.</span><span style="color: #444444;">Button</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Emit</span><span style="color: #f57c00;">"</span><span style="color: #444444;">)) {</span></span><br /><span style="font-size: 80%;"><span style="color: #444444;">            </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">client</span><span style="color: #444444;">.</span><span style="color: #444444;">Emit</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">emit</span><span style="color: #f57c00;">"</span><span style="color: #444444;">, </span><span style="color: #444444;">System</span><span style="color: #444444;">.</span><span style="color: #444444;">DateTime</span><span style="color: #444444;">.</span><span style="color: #444444;">Now</span><span style="color: #444444;">.</span><span style="color: #444444;">ToString</span><span style="color: #444444;">());</span></span><br /><span style="color: #444444; font-size: 80%;">        }</span><br /><br /><span style="font-size: 80%;"><span style="color: #444444;">        </span><span style="color: #009695;">if</span><span style="color: #444444;"> (</span><span style="color: #3363a4;">GUILayout</span><span style="color: #444444;">.</span><span style="color: #444444;">Button</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Close</span><span style="color: #f57c00;">"</span><span style="color: #444444;">)) {</span></span><br /><span style="font-size: 80%;"><span style="color: #444444;">            </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">client</span><span style="color: #444444;">.</span><span style="color: #444444;">Close</span><span style="color: #444444;">();</span></span><br /><span style="color: #444444; font-size: 80%;">        }</span><br /><span style="color: #444444; font-size: 80%;">    }</span><br /><span style="color: #444444; font-size: 80%;">}</span></span></blockquote> </li> <li>実行後に各種<a class="keyword" href="http://d.hatena.ne.jp/keyword/GUI">GUI</a>ボタンを押下することで導通確認が可能</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>まとめ</strong></span></p> <ul> <li>最新の socket.io(1.3.x)に UnitySocketIO が対応していないっぽい</li> </ul> <p> </p> hwks Google Analytics Plugin for Unity を試してみる hatenablog://entry/8454420450095428971 2015-05-25T02:33:03+09:00 2015-05-25T21:28:03+09:00 Google Analytics Plugin for Unity - Developer's Guide を参考に試していきます https://developers.google.com/analytics/devguides/collection/unity/v3/devguide 目標 最小限の設定で Unity と Google Analytics を連携させる 前提 Google Analytics のアカウントを持っている Unity から Android 向けにビルドして実機に転送できる Unity から iPhone 向けにビルドして実機に転送できる 環境 Unity 5.0… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Analytics">Google Analytics</a> Plugin for Unity - Developer's Guide を参考に試していきます</p> <p><a href="https://developers.google.com/analytics/devguides/collection/unity/v3/devguide">https://developers.google.com/analytics/devguides/collection/unity/v3/devguide</a></p> <p> </p> <p><span style="text-decoration: underline;"><strong>目標</strong></span></p> <ul> <li>最小限の設定で Unity と <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Analytics">Google Analytics</a> を連携させる</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>前提</strong></span></p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Analytics">Google Analytics</a> のアカウントを持っている</li> <li>Unity から <a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> 向けにビルドして実機に転送できる</li> <li>Unity から <a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a> 向けにビルドして実機に転送できる</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>環境</strong></span></p> <ul> <li>Unity 5.0.2f1 Personal</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a> 6.3.1</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS%208">iOS 8</a>.3</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> 4.0.4</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Analytics">Google Analytics</a> の設定<br /></strong></span></p> <ol> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Analytics">Google Analytics</a> にログイン</li> <li>画面上部の「アナリティクス設定」をクリック</li> <li>プロパティ -&gt; 「新しいプロパティを作成」をクリック</li> <li>ト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C3%A5%AD%A5%F3%A5%B0">ラッキング</a>対象でモバイルアプリを選択して続行</li> <li>「ト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C3%A5%AD%A5%F3%A5%B0">ラッキング</a>ID を取得」ボタンを押下</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Analytics">Google Analytics</a> Plugin の設定</strong></span></p> <ol> <li>以下のURLよりパッケージをダウンロードしてインストール<br /><a href="https://github.com/googleanalytics/google-analytics-plugin-for-unity/raw/master/googleanalyticsv3.unitypackage">https://github.com/googleanalytics/google-analytics-plugin-for-unity/raw/master/googleanalyticsv3.unitypackage</a></li> <li>Assets/Plugins/GoogleAnalyticsV3/GAv3.prefab で以下の値を Inspector から設定<br /> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> Tracking Code : 先で取得したト<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%C3%A5%AD%A5%F3%A5%B0">ラッキング</a>ID</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> Tracking Code : 同上</li> <li>Send Launch Event : True(チェックを入れる)</li> </ul> </li> <li>GAv3.prefab を Hierarchy にドラッグ</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> の設定</strong></span></p> <p>(既に使用している AndroidManifest.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a> があれば1.と2.の手順は不要)</p> <ol> <li>一度 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> 向けにビルド</li> <li>Temp/StagingArea/AndroidManifest.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a> を Assets/Plugins/<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> にコピー</li> <li>コピーした AndroidManifest.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a> に以下の要素を追加 <blockquote><span style="font-family: Menlo; font-size: 80%;"><span style="color: #444444;">&lt;</span><span style="color: #3363a4;">uses</span><span style="color: #3363a4;">-</span><span style="color: #3363a4;">permission</span><span style="color: #3363a4;"> </span><span style="color: #444444;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a>:name</span><span style="color: #444444;">=</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a></span><span style="color: #f57c00;">.</span><span style="color: #f57c00;">permission</span><span style="color: #f57c00;">.</span><span style="color: #f57c00;">INTERNET</span><span style="color: #f57c00;">"</span><span style="color: #3363a4;"> </span><span style="color: #444444;">/&gt;</span><br /><span style="color: #444444;">&lt;</span><span style="color: #3363a4;">uses</span><span style="color: #3363a4;">-</span><span style="color: #3363a4;">permission</span><span style="color: #3363a4;"> </span><span style="color: #444444;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a>:name</span><span style="color: #444444;">=</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a></span><span style="color: #f57c00;">.</span><span style="color: #f57c00;">permission</span><span style="color: #f57c00;">.</span><span style="color: #f57c00;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/ACCESS">ACCESS</a>_NETWORK_STATE</span><span style="color: #f57c00;">"</span><span style="color: #444444;">/&gt;</span></span></blockquote> </li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> の設定</strong></span></p> <ol> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> 向けにビルド</li> <li>生成された Unity-<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>.xcodeproj から <a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a> を起動</li> <li>「General」タブの Linked Frameworks and Libraries の「+」ボタンを押下</li> <li>CoreData.framework を検索して「Add」ボタンを押下<br /> <p><img class="hatena-fotolife" title="f:id:hwks:20150525021927p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20150525/20150525021927.png" alt="f:id:hwks:20150525021927p:plain" /></p> </li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>実行</strong></span></p> <ol> <li>それぞれの環境でビルドしてアプリを実行する</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Analytics">Google Analytics</a> のリアルタイム画面でアクティブなユーザとして表示される</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>補足</strong></span></p> <ul> <li>GAv3.prefab の Product Name 値や Bundle Version 値について入力必須項目ではないですが、入力した方が <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Analytics">Google Analytics</a> 上で値を確認し易くなります</li> <li>LogEvent や LogScreen 等を適切なタイミングで実行することによって、様々なユーザ行動を解析して取得出来るようです<br /><a href="https://developers.google.com/analytics/devguides/collection/unity/v3/reference">https://developers.google.com/analytics/devguides/collection/unity/v3/reference</a></li> </ul> <p> </p> hwks UnityでGooglePlayGameServicesに接続 hatenablog://entry/8454420450094793393 2015-05-18T15:11:18+09:00 2015-05-18T15:11:18+09:00 目標 開発用アプリで Google Play Game Services に接続 前提 Google Play Developer Console にログイン可能なアカウントを持っていること Unity から Android 向けにビルドして実機に転送できること ゲームサービスを追加 Google Play Developer Console にログイン 画面左の「ゲームサービス」タブをクリックし、「Google Play ゲーム サービスをセットアップ」ボタンを押下 ゲームの名前を適当に入力、ゲームの種類を適当に選択して「次へ」ボタンを押下 画面左の「リンク済み」タブをクリックし、「Andr… <p><span style="text-decoration: underline;"><strong>目標</strong></span></p> <ul> <li>開発用アプリで <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Play">Google Play</a> Game Services に接続</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>前提</strong></span></p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Play">Google Play</a> Developer Console にログイン可能なアカウントを持っていること</li> <li>Unity から <a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> 向けにビルドして実機に転送できること</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>ゲームサービスを追加</strong></span></p> <ol> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Play">Google Play</a> Developer Console にログイン</li> <li>画面左の「ゲームサービス」タブをクリックし、「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Play">Google Play</a> ゲーム サービスをセットアップ」ボタンを押下</li> <li>ゲームの名前を適当に入力、ゲームの種類を適当に選択して「次へ」ボタンを押下</li> <li>画面左の「リンク済み」タブをクリックし、「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>」ボタンを押下</li> <li>パッケージ名を入力して「保存して次へ」ボタンを押下</li> <li>「今すぐアプリを承認」ボタンを押下</li> <li>Branding Information ウィンドウの Product logo と Home Page URL は空欄のままで「Continue」ボタンを押下</li> <li>(ブラウザで Client ID Settings ウィンドウが開いたままにしてターミナルを開く)</li> <li>$ keytool -keystore ~/.<a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a>/debug.keystore -list -v</li> <li>対話型で聞かれるパスワードはデフォルト値の <a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a> を入力</li> <li>表示された証明書のフィンガプリントの <a class="keyword" href="http://d.hatena.ne.jp/keyword/SHA1">SHA1</a> の値をコピー</li> <li>(ブラウザの Client ID Settings ウィンドウに戻る)</li> <li>11. でコピーした <a class="keyword" href="http://d.hatena.ne.jp/keyword/SHA1">SHA1</a> 値をペーストして「Create client」ボタンを押下</li> <li>ゲームサービスの「リンク済みアプリ」画面でアプリIDを<span style="color: #dd830c;">コピー</span>しておく</li> <li>必要があれば「テスト」画面からテスターを追加する<br />(テスターとして追加されていない<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>アカウントからは接続できない)</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Play">Google Play</a> Game Services <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>の導入</strong></span></p> <ol> <li> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="playgameservices/play-games-plugin-for-unity" src="//hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fplaygameservices%2Fplay-games-plugin-for-unity" frameborder="0" scrolling="no"><a href="https://github.com/playgameservices/play-games-plugin-for-unity">playgameservices/play-games-plugin-for-unity</a></iframe><cite class="hatena-citation"></cite></p> </li> <li>画面右側の「Download ZIP」ボタンを押下</li> <li>zipファイルを展開して、current-build/GooglePlayGamesPlugin-0.9.20.unitypackage をインポートする</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>Unityの設定</strong></span></p> <ol> <li>「File」メニュー -&gt; 「Build Settings...」</li> <li>Platformで<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>を選択して「Switch Platform」ボタンを押下</li> <li>「Player Settings...」ボタンを押下し、Inspector上で以下を設定<br /> <ul> <li>IdentificationのBundle Identifier : 先で入力したパッケージ名</li> </ul> </li> <li>「Window」メニュー -&gt; 「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Play">Google Play</a> Games」-&gt;「Setup」-&gt; 「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> setup...」</li> <li>Application ID に先で<span style="color: #000000;">コピー</span>したアプリIDを<span style="color: #dd830c;">ペースト<span style="color: #000000;">して「Setup」ボタンを押下</span></span></li> <li>以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を適当な GameObject にアタッチ <blockquote><span style="font-family: Menlo;"><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">;</span><br /><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">GooglePlayGames</span><span style="color: #444444;">;</span><br /><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">.</span><span style="color: #444444;">SocialPlatforms</span><span style="color: #444444;">;</span><br /><br /><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #009695;">class</span><span style="color: #444444;"> </span><span style="color: #444444;">SocialPlatformsTest</span><span style="color: #444444;"> : </span><span style="color: #3363a4;">MonoBehaviour</span><span style="color: #444444;"> {</span><br /><span style="color: #444444;">    </span><br /><span style="color: #444444;">    </span><span style="color: #3363a4;">void</span><span style="color: #444444;"> </span><span style="color: #444444;">Start</span><span style="color: #444444;">() {</span><br /><span style="color: #444444;">        </span><span style="color: #444444;">PlayGamesPlatform</span><span style="color: #444444;">.</span><span style="color: #444444;">Activate</span><span style="color: #444444;"> ();</span><br /><span style="color: #444444;">        </span><span style="color: #3363a4;">Social</span><span style="color: #444444;">.</span><span style="color: #444444;">localUser</span><span style="color: #444444;">.</span><span style="color: #444444;">Authenticate</span><span style="color: #444444;">((</span><span style="color: #444444;">success</span><span style="color: #444444;">) =&gt; {</span><br /><span style="color: #444444;">            </span><span style="color: #009695;">if</span><span style="color: #444444;"> (</span><span style="color: #444444;">success</span><span style="color: #444444;">) {</span><br /><span style="color: #444444;">                </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Authentication successful</span><span style="color: #f57c00;">"</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">                </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #3363a4;">Social</span><span style="color: #444444;">.</span><span style="color: #444444;">localUser</span><span style="color: #444444;">.</span><span style="color: #444444;">userName</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">                </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #3363a4;">Social</span><span style="color: #444444;">.</span><span style="color: #444444;">localUser</span><span style="color: #444444;">.</span><span style="color: #444444;">id</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">            } </span><span style="color: #009695;">else</span><span style="color: #444444;"> {</span><br /><span style="color: #444444;">                </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Authentication failed</span><span style="color: #f57c00;">"</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">            }</span><br /><span style="color: #444444;">        });</span><br /><span style="color: #444444;">    }</span><br /><span style="color: #444444;">}</span></span></blockquote> </li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>実行</strong></span></p> <ol> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>実機とマシンをUSBケーブルで繋ぐ</li> <li>Unityで「Build and Run」を実行</li> <li>アプリ起動時に <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Play">Google Play</a> ゲームアプリのログイン画面が表示される</li> </ol> <p> </p> <p> </p> <p> </p> hwks GameCenterで達成項目を解除できない hatenablog://entry/8454420450094637043 2015-05-16T23:17:20+09:00 2015-05-18T15:37:34+09:00 引用のコードでGameCenterの達成項目を解除しようとすると Social.ReportProgress("achievement.clear2", 100.0, (success) => { if (success) { Debug.Log("Report progress successful"); } else { Debug.Log("Report progress failed"); }}); 以下のようなエラーが表示されて達成項目が解除できない Looking for achievement.clear2, cache count is 1 Report progress fa… <p>引用のコードでGameCenterの達成項目を解除しようとすると</p> <blockquote> <p><span style="font-family: Menlo;"><span style="color: #3363a4;">Social</span><span style="color: #444444;">.</span><span style="color: #444444;">ReportProgress</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">achievement.clear2</span><span style="color: #f57c00;">"</span><span style="color: #444444;">, </span><span style="color: #f57c00;">100.0</span><span style="color: #444444;">, (</span><span style="color: #444444;">success</span><span style="color: #444444;">) =&gt; {</span><br /><span style="color: #444444;">    </span><span style="color: #009695;">if</span><span style="color: #444444;"> (</span><span style="color: #444444;">success</span><span style="color: #444444;">) {</span><br /><span style="color: #444444;">        </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Report progress successful</span><span style="color: #f57c00;">"</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">    } </span><span style="color: #009695;">else</span><span style="color: #444444;"> {</span><br /><span style="color: #444444;">        </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Report progress failed</span><span style="color: #f57c00;">"</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">    }</span><br /><span style="color: #444444;">});</span></span></p> </blockquote> <p>以下のようなエラーが表示されて達成項目が解除できない</p> <p><em> Looking for achievement.clear2, cache count is 1</em></p> <p><em>Report progress failed</em></p> <ul> <li>achievement.clear2はGameCenterで設定した達成項目ID</li> <li>cache countは状況によって1でなかったりもする</li> </ul> <p> </p> <p>同じ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>をUnity4.6.5で<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>向けにビルドした際は正しく達成項目が解除されたため、Unity5.0.2のバグではないかと思われる</p> <p> </p> hwks UnityでGameCenterに接続 hatenablog://entry/8454420450094370871 2015-05-14T04:03:03+09:00 2015-05-18T15:36:52+09:00 目標 開発用Appで Game Center に接続 前提 iOS Developer Program に登録している Apple ID を持っていること Unity から iOS 向けにビルドして実機に転送できること 開発用Appの登録と Game Center の設定 先ずは接続対象となる開発用Appを iTunes Connect 上に作成する https://itunesconnect.apple.com にログイン(iOS Developer Programに登録済みのApple IDでログイン) 以下のような感じで新規 iOS App を作成 名前 : 適当な値 バージョン : 1… <p><span style="text-decoration: underline;"><strong>目標<br /></strong></span></p> <ul> <li>開発用Appで Game Center に接続</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>前提</strong></span></p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> Developer Program に登録している <a class="keyword" href="http://d.hatena.ne.jp/keyword/Apple">Apple</a> ID を持っていること</li> <li>Unity から <a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> 向けにビルドして実機に転送できること</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>開発用Appの登録と Game Center の設定</strong></span></p> <p>先ずは接続対象となる開発用Appを <a class="keyword" href="http://d.hatena.ne.jp/keyword/iTunes">iTunes</a> Connect 上に作成する</p> <ol> <li><a href="https://itunesconnect.apple.com">https://itunesconnect.apple.com</a> にログイン<br />(<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> Developer Programに登録済みの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Apple">Apple</a> IDでログイン)</li> <li>以下のような感じで新規 <a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> App を作成<br /> <ul> <li>名前 : 適当な値</li> <li>バージョン : 1.0</li> <li>プライマリ言語 : Japanese</li> <li>SKU : 適当なユニーク値</li> <li>バンドルID : 適当なユニーク値(予め Developer <a class="keyword" href="http://d.hatena.ne.jp/keyword/Portal">Portal</a> で作っておく)</li> </ul> </li> <li>「Game Center」タブよりシングルゲーム向けに有効化する<br />Leaderboardや達成項目が無くとも、Game Center には接続可能<br /> <p><img class="hatena-fotolife" title="f:id:hwks:20150514033712p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20150514/20150514033712.png" alt="f:id:hwks:20150514033712p:plain" /></p> </li> <li>「バージョン」タブより Game Center を有効化<br /> <p><img class="hatena-fotolife" title="f:id:hwks:20150514034106p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20150514/20150514034106.png" alt="f:id:hwks:20150514034106p:plain" /></p> </li> </ol> <p><span style="text-decoration: underline;"><strong>Sandboxテスターの追加と実機設定</strong></span></p> <ol> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/iTunes">iTunes</a> Connect の「ユーザと役割」メニューより「Sandboxテスター」をクリック</li> <li>必要な情報を入力して「保存」ボタンを押下<br />(メールアドレスは受信できるアドレスを用意する必要がある)</li> <li>確認で使う<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>実機の「設定」 -&gt; 「Game Center」で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A5%C9%A5%DC%A5%C3%A5%AF%A5%B9">サンドボックス</a>を<strong><span style="color: #00cc00;">ON</span></strong></li> <li>Game Center からログアウトしておく</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>Unityの設定</strong></span></p> <ol> <li>「File」メニュー -&gt; 「Build Settings...」</li> <li>Platformで<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>を選択して「Switch Platform」ボタンを押下</li> <li>「Player Settings...」ボタンを押下し、Inspector上で以下を設定<br /> <ul> <li>IdentificationのBundle Identifier : App作成時のバンドルID値</li> <li>IdentificationのBundle Identifier : App作成時のバージョン値</li> </ul> </li> <li> 以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を適当なGameObjectにアタッチ <blockquote><span style="font-family: Menlo;"><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">;</span><br /><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">.</span><span style="color: #444444;">SocialPlatforms</span><span style="color: #444444;">;</span><br /><br /><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #009695;">class</span><span style="color: #444444;"> </span><span style="color: #444444;">SocialPlatformsTest</span><span style="color: #444444;"> : </span><span style="color: #3363a4;">MonoBehaviour</span><span style="color: #444444;"> {</span><br /><span style="color: #444444;">    </span><br /><span style="color: #444444;">    </span><span style="color: #3363a4;">void</span><span style="color: #444444;"> </span><span style="color: #444444;">Start</span><span style="color: #444444;">() {</span><br /><span style="color: #444444;">        </span><span style="color: #3363a4;">Social</span><span style="color: #444444;">.</span><span style="color: #444444;">localUser</span><span style="color: #444444;">.</span><span style="color: #444444;">Authenticate</span><span style="color: #444444;">((</span><span style="color: #444444;">success</span><span style="color: #444444;">) =&gt; {</span><br /><span style="color: #444444;">            </span><span style="color: #009695;">if</span><span style="color: #444444;"> (</span><span style="color: #444444;">success</span><span style="color: #444444;">) {</span><br /><span style="color: #444444;">                </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Authentication successful</span><span style="color: #f57c00;">"</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">                </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #3363a4;">Social</span><span style="color: #444444;">.</span><span style="color: #444444;">localUser</span><span style="color: #444444;">.</span><span style="color: #444444;">userName</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">                </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #3363a4;">Social</span><span style="color: #444444;">.</span><span style="color: #444444;">localUser</span><span style="color: #444444;">.</span><span style="color: #444444;">id</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">            } </span><span style="color: #009695;">else</span><span style="color: #444444;"> {</span><br /><span style="color: #444444;">                </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Authentication failed</span><span style="color: #f57c00;">"</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">            }</span><br /><span style="color: #444444;">        });</span><br /><span style="color: #444444;">    }</span><br /><span style="color: #444444;">}</span></span></blockquote> </li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>実行</strong></span></p> <ol> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>実機とマシンをUSBケーブルで繋ぐ</li> <li>Unityで「Build and Run」を実行</li> <li>アプリ起動時に Game Center のログイン画面が表示される</li> </ol> <p> </p> hwks UnityをiPhone実機で動かす hatenablog://entry/8454420450094087833 2015-05-12T18:57:26+09:00 2015-05-12T19:06:16+09:00 目的 開発中のアプリを実機で確認する 前提条件として iOS Developer Programへの登録 Xcodeのインストール USBケーブルによる転送 開発環境 Unity5.0.0f4 Personal Xcode6.3.1 Xcodeの設定 検証用の実機をUSBで接続してXcode起動 Xcode -> Preferences... Accountsウィンドウで+を押下してAdd Apple ID... iOS Developer Programに登録したApple IDを入力する Unityの設定 File > Build Settings... > PlatformでiOSにSw… <p><span style="text-decoration: underline;"><strong>目的</strong></span></p> <ul> <li>開発中のアプリを実機で確認する</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>前提条件として</strong></span></p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> Developer Programへの登録</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>のインストール</li> <li>USBケーブルによる転送</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>開発環境</strong></span></p> <ul> <li>Unity5.0.0f4 Personal</li> <li>Xcode6.3.1</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>の設定</strong></span></p> <ol> <li>検証用の実機をUSBで接続して<a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>起動</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a> -&gt; Preferences...</li> <li>Accountsウィンドウで+を押下してAdd <a class="keyword" href="http://d.hatena.ne.jp/keyword/Apple">Apple</a> ID...</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> Developer Programに登録した<a class="keyword" href="http://d.hatena.ne.jp/keyword/Apple">Apple</a> IDを入力する</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>Unityの設定</strong></span></p> <ol> <li>File &gt; Build Settings... &gt; Platformで<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>にSwitch Platform</li> <li>File &gt; Build Settings... &gt; Player Settings... &gt; Other Settings &gt; Bundle Identifierの値を適当に変更する</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>Unityで<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>ビルド</strong></span></p> <ol> <li>File &gt; Build &amp; Run</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>実機にインストールされアプリが起動する</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>まとめ</strong></span></p> <ul> <li>開発用アプリの実機転送は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>によって(よくも悪くも)プロビジョニングプロファイルや証明書を意識する必要無く行うことができる</li> </ul> <p> </p> hwks UnityException: Launching iOS project via Xcode failed. hatenablog://entry/8454420450094192296 2015-05-12T02:10:44+09:00 2015-05-12T02:20:40+09:00 PlatformがiOSの状態でBuild And Runをした際に以下のエラーが出る場合の対処方法 UnityException: Launching iOS project via Xcode failed. Check editor log for details. 開発環境 Unity 5.0.0f4 Personal Xcode 6.3.1 対処方法 /Applications/Xcode.app/Contents/Info.plistをXcodeで開く DVTPlugInCompatibilityUUIDキーの値をコピー /Applications/Unity/Unity.app/… <p>Platformが<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>の状態でBuild And Runをした際に以下のエラーが出る場合の対処方法</p> <p><em>UnityException: Launching <a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> project via <a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a> failed. Check editor log for details.</em></p> <p> </p> <p><span style="text-decoration: underline;"><strong>開発環境</strong></span></p> <ul> <li>Unity 5.0.0f4 Personal</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a> 6.3.1</li> </ul> <p><span style="text-decoration: underline;"><strong>対処方法</strong></span></p> <ol> <li>/Applications/<span style="color: #dd830c;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>.app</span>/Contents/Info.plistを<a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>で開く</li> <li>DVTPlugInCompatibilityUUIDキーの値をコピー</li> <li>/Applications/Unity/<span style="color: #d32f2f;">Unity.app</span>/Contents/PlaybackEngines/iossupport/Tools/<a class="keyword" href="http://d.hatena.ne.jp/keyword/OSX">OSX</a>/Unity4XC.xcplugin/Contents/Info.plistを<a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>で開く</li> <li>DVTPlugInCompatibilityUUIDsキーに2.でコピーした値を追加</li> </ol> <p> </p> <p> </p> hwks uGUIで縦持ち複数解像度対応 hatenablog://entry/8454420450081354668 2015-01-25T23:43:22+09:00 2015-01-25T23:56:31+09:00 以下のような縦持ちゲームの(よくある黒帯)複数解像度対応をuGUIで行うためには http://schoolgirlstrikers.jp/special.htmlの壁紙使用 iPhone4(640x960) iPhone5(640x1136) 開発環境 OS X 10.6.8 Unity 4.6.0 手順 GameObject -> UI -> Panel でシーンにパネルを追加 解像度640x960の壁紙をSpriteとして追加 シーンに追加されたキャンバスのInspector上で以下の設定値を変更 Canvas Scaler Ui Scale Mode : Scale With Scre… <p>以下のような縦持ちゲームの(よくある黒帯)<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%A3%BF%F4">複数</a>解像度対応をuGUIで行うためには</p> <p><a href="http://schoolgirlstrikers.jp/special.html">http://schoolgirlstrikers.jp/special.html</a>の壁紙使用</p> <ul> <li>iPhone4(640x960)<br /> <p><img class="hatena-fotolife" title="f:id:hwks:20150125233600p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20150125/20150125233600.png" alt="f:id:hwks:20150125233600p:plain" width="283" /></p> </li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone5">iPhone5</a>(640x1136)<br /> <p><img class="hatena-fotolife" title="f:id:hwks:20150125233614p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20150125/20150125233614.png" alt="f:id:hwks:20150125233614p:plain" /></p> </li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>開発環境</strong></span></p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/OS%20X">OS X</a> 10.6.8</li> <li>Unity 4.6.0</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>手順</strong></span></p> <ol> <li>GameObject -&gt; UI -&gt; Panel でシーンにパネルを追加</li> <li>解像度640x960の壁紙をSpriteとして追加</li> <li>シーンに追加されたキャンバスのInspector上で以下の設定値を変更<br /> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Canvas">Canvas</a> Scaler<br /> <p><img class="hatena-fotolife" title="f:id:hwks:20150125232409p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20150125/20150125232409.png" alt="f:id:hwks:20150125232409p:plain" /></p> <ul> <li>Ui Scale Mode : Scale With Screen Size</li> <li>Reference Resolution<br /> <ul> <li>X : 640</li> <li>Y : 960</li> </ul> </li> <li>Screen Match Mode : Match Width or Height</li> <li>Match : 0</li> </ul> </li> </ul> </li> <li>シーンに追加されたパネルのInspector上で以下の設定値を変更<br /> <ul> <li>Rect Transform<br /> <p><img class="hatena-fotolife" title="f:id:hwks:20150125232201p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20150125/20150125232201.png" alt="f:id:hwks:20150125232201p:plain" /></p> <ul> <li>Anchor Presets : center middle</li> <li>Width : 640</li> <li>Height : 960</li> </ul> </li> <li>Image<br /> <ul> <li>Source Image : 手順2.で追加したSprite</li> <li>Color <br /> <ul> <li>A : 255</li> </ul> </li> </ul> </li> </ul> </li> <li>シーンに追加されたカメラのInspector上で以下の設定値を変更<br /> <ul> <li>Camera<br /> <ul> <li>Background : 黒(帯)</li> </ul> </li> </ul> </li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>補足</strong></span></p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Canvas">Canvas</a> ScalerのMatchをHeight寄りにすることで縦を基準にすることも可能</li> </ul> hwks UnityでJSONファイルを読み込む (LitJSON) hatenablog://entry/8454420450077710900 2014-12-22T03:05:29+09:00 2015-05-20T13:13:01+09:00 開発環境 OS X 10.6.8 Unity 4.6.0 LitJSONのインストール http://lbv.github.io/litjson/にアクセス LitJson.dllをダウンロードしてUnityプロジェクトのAssets/Pluginsにコピー パースするJSONファイルの作成 Assets/Resources/JSONディレクトリを作成 1.で作成したディレクトリに以下の内容でSample.jsonを作成 { "name": "foo", "age": 24, "weight": 55.8, "married": true, "birthday": "1990-08-30 03… <p><span style="text-decoration: underline;"><strong>開発環境</strong></span></p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/OS%20X">OS X</a> 10.6.8</li> <li>Unity 4.6.0</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>LitJSONのインストール</strong></span></p> <ol> <li><a href="http://lbv.github.io/litjson/">http://lbv.github.io/litjson/</a>にアクセス</li> <li>LitJson.dllをダウンロードしてUnityプロジェクトのAssets/Pluginsにコピー</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>パースする<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>ファイルの作成</strong></span></p> <ol> <li>Assets/Resources/<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>ディレクトリを作成</li> <li>1.で作成したディレクトリに以下の内容でSample.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>を作成 <blockquote>{<br />    "name": "foo",<br />    "age": 24,<br />    "weight": 55.8,<br />    "married": true,<br />    "birthday": "1990-08-30 03:38:13",<br />    "friends": [<br />        {<br />            "name": "bar",<br />            "age": 25,<br />            "weight": 50.2,<br />            "married": false,<br />            "birthday": "1989-04-01 15:02:47"<br />        }<br />    ]<br />}</blockquote> </li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>LitJSONでパースしてデ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%EA%A5%A2%A5%E9%A5%A4%A5%BA">シリアライズ</a></strong></span></p> <p><a href="http://lbv.github.io/litjson/docs/quickstart.html">http://lbv.github.io/litjson/docs/quickstart.html</a>も参考に</p> <p>以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を作成して適当なGameObjectに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>としてアタッチ<span style="font-family: Menlo; font-size: 80%;"><span style="color: #444444;"><br /></span></span></p> <blockquote> <p><span style="font-family: Menlo;"><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">;</span><br /><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">LitJson</span><span style="color: #444444;">;</span><br /><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">System</span><span style="color: #444444;">;</span><br /><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">System</span><span style="color: #444444;">.</span><span style="color: #444444;">Collections</span><span style="color: #444444;">;</span><br /><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">System</span><span style="color: #444444;">.</span><span style="color: #444444;">Collections</span><span style="color: #444444;">.</span><span style="color: #444444;">Generic</span><span style="color: #444444;">;</span><br /><br /><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #009695;">class</span><span style="color: #444444;"> </span><span style="color: #444444;">LitJsonSample</span><span style="color: #444444;"> : </span><span style="color: #3363a4;">MonoBehaviour</span><span style="color: #444444;"> {</span><br /><br /><span style="color: #444444;">    </span><span style="color: #3363a4;">void</span><span style="color: #444444;"> </span><span style="color: #444444;">Start</span><span style="color: #444444;"> () {</span><br /><span style="color: #444444;">        </span><span style="color: #3363a4;">TextAsset</span><span style="color: #444444;"> </span><span style="color: #444444;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a></span><span style="color: #444444;"> = </span><span style="color: #3363a4;">Resources</span><span style="color: #444444;">.</span><span style="color: #444444;">Load</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>/Sample</span><span style="color: #f57c00;">"</span><span style="color: #444444;">) </span><span style="color: #009695;">as</span><span style="color: #444444;"> </span><span style="color: #3363a4;">TextAsset</span><span style="color: #444444;">;</span><br /><span style="color: #444444;">        </span><span style="color: #444444;">Person</span><span style="color: #444444;"> </span><span style="color: #444444;">person</span><span style="color: #444444;"> = </span><span style="color: #444444;">JsonMapper</span><span style="color: #444444;">.</span><span style="color: #444444;">ToObject</span><span style="color: #444444;">&lt;</span><span style="color: #444444;">Person</span><span style="color: #444444;">&gt;(</span><span style="color: #444444;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a></span><span style="color: #444444;">.</span><span style="color: #444444;">text</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">    }</span><br /><span style="color: #444444;">}</span><br /><br /><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #009695;">class</span><span style="color: #444444;"> </span><span style="color: #444444;">Person</span><span style="color: #444444;"> {</span><br /><span style="color: #444444;">    </span><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #3363a4;">string</span><span style="color: #444444;"> </span><span style="color: #444444;">name</span><span style="color: #444444;">;</span><br /><span style="color: #444444;">    </span><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #3363a4;">int</span><span style="color: #444444;"> </span><span style="color: #444444;">age</span><span style="color: #444444;">;</span><br /><span style="color: #444444;">    </span><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #3363a4;">double</span><span style="color: #444444;"> </span><span style="color: #444444;">weight</span><span style="color: #444444;">;</span><br /><span style="color: #444444;">    </span><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #3363a4;">bool</span><span style="color: #444444;"> </span><span style="color: #444444;">married</span><span style="color: #444444;">;</span><br /><span style="color: #444444;">    </span><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #444444;">DateTime</span><span style="color: #444444;"> </span><span style="color: #444444;">birthday</span><span style="color: #444444;">;</span><br /><span style="color: #444444;">    </span><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #444444;">List</span><span style="color: #444444;">&lt;</span><span style="color: #444444;">Person</span><span style="color: #444444;">&gt; </span><span style="color: #444444;">friends</span><span style="color: #444444;">;</span><br /><span style="color: #444444;">}</span></span></p> </blockquote> <p> </p> <p><span style="text-decoration: underline;"><strong>補足</strong></span></p> <ul> <li>weightでfloat型が使えなかったためdouble型にしています<br />JsonException: Can't assign value '55.8' (type System.Double) to type System.Single</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/github">github</a>で管理されている<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>のREADME.mdによるとライセンスはUnlicense (public domain)なので手軽に使いやすい</li> </ul> hwks uGUIでスライダーのイベントを取得 hatenablog://entry/8454420450077092655 2014-12-15T01:26:55+09:00 2014-12-15T01:28:27+09:00 Unity 4.6から追加されたUIシステム(通称uGUI)でスライダーのイベントを取得 開発環境 OS X 10.6.8 Unity 4.6.0 手順 GameObject -> UI -> Sliderでシーン上にスライダーを作成 作成したスタイダーに以下のスクリプトをコンポーネントとして付加 using UnityEngine;using UnityEngine.UI;public class TestSlider : MonoBehaviour { void Start () { Slider slider = this.GetComponent <Slider> (); slider… <p>Unity 4.6から追加されたUIシステム(通称uGUI)でスライダーのイベントを取得</p> <p> </p> <p><span style="text-decoration: underline;"><strong>開発環境</strong></span></p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/OS%20X">OS X</a> 10.6.8</li> <li>Unity 4.6.0</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>手順</strong></span></p> <ol> <li>GameObject -&gt; UI -&gt; Sliderでシーン上にスライダーを作成</li> <li>作成したスタイダーに以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>として付加 <blockquote><span style="font-family: Menlo;"><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">;</span><br /><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">.</span><span style="color: #444444;">UI</span><span style="color: #444444;">;</span><br /><br /><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #009695;">class</span><span style="color: #444444;"> </span><span style="color: #444444;">TestSlider</span><span style="color: #444444;"> : </span><span style="color: #3363a4;">MonoBehaviour</span><span style="color: #444444;"> {</span><br /><br /><span style="color: #444444;">    </span><span style="color: #3363a4;">void</span><span style="color: #444444;"> </span><span style="color: #444444;">Start</span><span style="color: #444444;"> () {</span><br /><span style="color: #444444;">        </span><span style="color: #444444;">Slider</span><span style="color: #444444;"> </span><span style="color: #444444;">slider</span><span style="color: #444444;"> = </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">GetComponent</span><span style="color: #444444;"> &lt;</span><span style="color: #444444;">Slider</span><span style="color: #444444;">&gt; ();</span><br /><span style="color: #444444;">        </span><span style="color: #444444;">slider</span><span style="color: #444444;">.</span><span style="color: #444444;">onValueChanged</span><span style="color: #444444;">.</span><span style="color: #444444;">AddListener</span><span style="color: #444444;">((</span><span style="color: #009695;">value</span><span style="color: #444444;">) =&gt; {</span><br /><span style="color: #444444;">            </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;">(</span><span style="color: #009695;">value</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">        });</span><br /><span style="color: #444444;">    }</span><br /><span style="color: #444444;">}</span></span></blockquote> </li> <li>シーンを実行してスライダーを操作すると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>ログでスライダーの値が出力されます</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>補足</strong></span></p> <p><img class="hatena-fotolife" title="f:id:hwks:20141215011319p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20141215/20141215011319.png" alt="f:id:hwks:20141215011319p:plain" /></p> <p>上図のようにInspector上でコールバック関数を設定することも出来るのですが、スライダーの値をコールバック関数で<strong>引数として</strong>受け取るために<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>から設定しています</p> <p>また、AddListenerを使って(non persistent)コールバック関数を設定した場合は「Runtime Only」となるようです</p> <p>Inspectorを使って(persistent)設定した場合は「Off」「Editor And Runtime」「Runtime Only」から選択できるようです</p> <p><a href="http://docs.unity3d.com/460/Documentation/ScriptReference/Events.UnityEvent.AddListener.html">http://docs.unity3d.com/460/Documentation/ScriptReference/Events.UnityEvent.AddListener.html</a></p> <p><a href="http://docs.unity3d.com/460/Documentation/ScriptReference/Events.UnityEventCallState.html">http://docs.unity3d.com/460/Documentation/ScriptReference/Events.UnityEventCallState.html</a></p> hwks イベントのOffとEditor And RuntimeとRuntime Only hatenablog://entry/8454420450076710316 2014-12-11T02:24:17+09:00 2014-12-11T02:35:33+09:00 Inspector上でイベントを扱う際に選択できる「Off」「Editor And Runtime」「Runtime Only」について、それぞれ制御をまとめてみました サンプルとしてuGUIのSliderを使っています Off何をしてもOnValueChangedは呼ばれない Editor And Runtimeシーン実行中にスライダーを操作した時、またはシーン未実行中にInspector上でValueを変更した時にOnValueChangedが呼ばれる Runtime Onlyシーン実行中にスライダーを操作した時のみOnValueChangedが呼ばれる <p>Inspector上でイベントを扱う際に選択できる「Off」「Editor And Runtime」「Runtime Only」について、それぞれ制御をまとめてみました</p> <p>サンプルとしてuGUIのSliderを使っています</p> <p><img class="hatena-fotolife" title="f:id:hwks:20141211021004p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20141211/20141211021004.png" alt="f:id:hwks:20141211021004p:plain" /></p> <ul> <li>Off<br />何をしてもOnValueChangedは呼ばれない</li> <li>Editor And Runtime<br />シーン実行中にスライダーを操作した時、またはシーン<span style="color: #cc0000;"><strong>未</strong></span>実行中にInspector上でValueを変更した時にOnValueChangedが呼ばれる</li> <li>Runtime Only<br />シーン実行中にスライダーを操作した時のみOnValueChangedが呼ばれる</li> </ul> hwks uGUIでボタンのクリックイベントを取得 hatenablog://entry/8454420450076601936 2014-12-10T02:49:26+09:00 2014-12-18T02:11:41+09:00 Unity 4.6から追加されたUIシステム(通称uGUI)でボタンのクリックイベントを取得 開発環境 OS X 10.6.8 Unity 4.6.0 手順 GameObject -> UI -> Buttonでシーン上にボタンを作成 ボタンクリック時のコールバック関数を作成 using UnityEngine;public class TestButtonClick : MonoBehaviour { public void ClickTest () { Debug.Log ("Clicked."); }} 2.で作成したスクリプトを1.で作成したボタンにコンポーネントとして追加 1.で作成… <p>Unity 4.6から追加されたUIシステム(通称uGUI)でボタンのクリックイベントを取得</p> <p> </p> <p><span style="text-decoration: underline;"><strong>開発環境</strong></span></p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/OS%20X">OS X</a> 10.6.8</li> <li>Unity 4.6.0</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>手順</strong></span></p> <ol> <li>GameObject -&gt; UI -&gt; Buttonでシーン上にボタンを作成</li> <li>ボタンクリック時のコールバック関数を作成 <blockquote><span style="font-family: Menlo;"><span style="color: #444444;"><span style="font-family: Menlo;"><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">;</span><br /><br /><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #009695;">class</span><span style="color: #444444;"> </span><span style="color: #444444;">TestButtonClick</span><span style="color: #444444;"> : </span><span style="color: #3363a4;">MonoBehaviour</span><span style="color: #444444;"> {</span><br /><span style="color: #444444;">    </span><br /><span style="color: #444444;">    </span><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #3363a4;">void</span><span style="color: #444444;"> </span><span style="color: #444444;">ClickTest</span><span style="color: #444444;"> () {</span><br /><span style="color: #444444;">        </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log</span><span style="color: #444444;"> (</span><span style="color: #f57c00;">"Clicked."</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">    }</span><br /><span style="color: #444444;">}</span></span><br /></span></span></blockquote> </li> <li>2.で作成した<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を1.で作成したボタンに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>として追加</li> <li>1.で作成したボタンのInspector上で、Button<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>のOnClick(<strong>UnityEngine.UI.ButtonClickedEvent</strong>)に対象としてButtonオブジェクト(自分自身)を追加<br /> <p><img class="hatena-fotolife" title="f:id:hwks:20141210015604p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20141210/20141210015604.png" alt="f:id:hwks:20141210015604p:plain" /></p> </li> <li>No Function -&gt; TestButtonClick -&gt; ClickTest ()</li> <li>アプリを起動してボタンを押下すると、ClickTest ()が実行される</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>補足:Inspectorで指定できるコールバック関数の条件<br /></strong></span></p> <ul> <li>public void</li> <li>引数は1つ以下</li> <li>引数で使える型はfloat、int、string、bool、Object</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>補足:<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>からコールバック関数を登録</strong></span></p> <p>Inspector上からだけではなく<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>からも登録可能</p> <p>ただし、AddListenerを使って(non persistent)コールバック関数を設定した場合は「Runtime Only」となるようです</p> <p>Inspectorを使って(persistent)設定した場合は「Off」「Editor And Runtime」「Runtime Only」から選択できるようです</p> <p><a href="http://docs.unity3d.com/460/Documentation/ScriptReference/Events.UnityEvent.AddListener.html">http://docs.unity3d.com/460/Documentation/ScriptReference/Events.UnityEvent.AddListener.html</a></p> <p><a href="http://docs.unity3d.com/460/Documentation/ScriptReference/Events.UnityEventCallState.html">http://docs.unity3d.com/460/Documentation/ScriptReference/Events.UnityEventCallState.html</a></p> <blockquote> <p><span style="font-family: Menlo;"><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">;</span><br /><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">.</span><span style="color: #444444;">UI</span><span style="color: #444444;">;</span><br /><br /><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #009695;">class</span><span style="color: #444444;"> </span><span style="color: #444444;">TestButtonClick</span><span style="color: #444444;"> : </span><span style="color: #3363a4;">MonoBehaviour</span><span style="color: #444444;"> {</span><br /><br /><span style="color: #444444;">    </span><span style="color: #3363a4;">void</span><span style="color: #444444;"> </span><span style="color: #444444;">Start</span><span style="color: #444444;"> () {</span><br /><span style="color: #444444;">        </span><span style="color: #444444;">Button</span><span style="color: #444444;"> </span><span style="color: #444444;">button</span><span style="color: #444444;"> = </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">GetComponent</span><span style="color: #444444;"> &lt;</span><span style="color: #444444;">Button</span><span style="color: #444444;">&gt; ();</span><br /><span style="color: #444444;">        </span><span style="color: #444444;">button</span><span style="color: #444444;">.</span><span style="color: #444444;">onClick</span><span style="color: #444444;">.</span><span style="color: #444444;">AddListener </span><span style="color: #444444;">(() =&gt; {</span><br /><span style="color: #444444;">            </span><span style="color: #3363a4;">Debug</span><span style="color: #444444;">.</span><span style="color: #444444;">Log </span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Clicked.</span><span style="color: #f57c00;">"</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">        });</span><br /><span style="color: #444444;">    }</span><br /><span style="color: #444444;">}</span></span> </p> </blockquote> <p> </p> hwks 複数バージョンのUnityを共存 hatenablog://entry/8454420450076398039 2014-12-07T20:53:32+09:00 2014-12-18T02:14:14+09:00 こちらのURLに概ね書いてありますが備忘録として http://docs-jp.unity3d.com/Documentation/Manual/InstallingMultipleVersionsofUnity.html 開発環境 OS X 10.6.8 Unity 4.5.5(インストール済み) 手順 /Applications/Unityのディレクトリ名を適当に変更e.g. /Applications/Unity455 Unity > Preferences... > General で「Always Show Project Wizard」にチェック別バージョンのUnityを起動した際… <p>こちらのURLに概ね書いてありますが備忘録として</p> <p><a href="http://docs-jp.unity3d.com/Documentation/Manual/InstallingMultipleVersionsofUnity.html">http://docs-jp.unity3d.com/Documentation/Manual/InstallingMultipleVersionsofUnity.html</a></p> <p> </p> <p><span style="text-decoration: underline;"><strong>開発環境</strong></span></p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/OS%20X">OS X</a> 10.6.8</li> <li>Unity 4.5.5(インストール済み)</li> </ul> <p> </p> <p><strong><span style="text-decoration: underline;">手順</span></strong></p> <ol> <li>/Applications/Unityのディレクトリ名を適当に変更<br />e.g. /Applications/Unity455</li> <li><span style="color: #cc0000;">Unity &gt; Preferences... &gt; General で「Always Show Project Wizard」にチェック</span><br />別バージョンのUnityを起動した際に、アセットの再インポートや<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>の再<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>を実行させないようにするため</li> <li>別バージョンのUnityをインストールする</li> <li>必要であればディレクトリ名を適当に変更しておく<br />e.g. /Applications/Unity460</li> </ol> hwks GitのTips hatenablog://entry/8454420450075904117 2014-12-02T03:56:13+09:00 2014-12-03T02:04:46+09:00 グローバルのユーザ名とユーザアドレスを変更 $ git config --global user.name sample$ git config --global user.email sample@example.com ローカルのユーザ名とユーザアドレスを変更 $ git config user.name sample$ git config user.email sample@example.com グローバルの.gitignoreをホームディレクトリに定義 $ git config --global core.excludesfile ~/.gitignore$ vi ~/.gitig… <ul> <li>グローバルのユーザ名とユーザアドレスを変更 <blockquote>$ git config --global user.name sample<br />$ git config --global user.email sample@<a class="keyword" href="http://d.hatena.ne.jp/keyword/example.com">example.com</a></blockquote> </li> <li>ローカルのユーザ名とユーザアドレスを変更 <blockquote>$ git config user.name sample<br />$ git config user.email sample@<a class="keyword" href="http://d.hatena.ne.jp/keyword/example.com">example.com</a></blockquote> </li> <li>グローバルの.gitignoreをホームディレクトリに定義 <blockquote>$ git config --global core.excludesfile ~/.gitignore<br />$ vi ~/.gitignore</blockquote> </li> <li>コンソール出力に色付け <blockquote>$ git config --global color.ui true</blockquote> </li> <li>カレントのブランチのみをデフォルトでpush <blockquote>$ git config --global push.default current</blockquote> </li> </ul> hwks UnityをGitでバージョン管理 hatenablog://entry/8454420450075174097 2014-11-25T00:56:30+09:00 2014-12-02T02:08:09+09:00 前提条件 Gitは開発環境にインストール済み Unityプロジェクトは既に存在する 開発環境 OS X 10.6.8 Unity 4.5.5 MonoDevelop-Unity 4.0.1 Git 1.7.4.1 Unityの準備 Edit > Project Settings > EditorのInspector上で以下を設定 Version ControlのModeをVisible Meta Files Asset SerializationのModeをForce Text UnityプロジェクトをGitの管理下に Unityプロジェクトの直下に移動 Gitのリポジトリを作成$ git i… <p><span style="text-decoration: underline;"><strong>前提条件</strong></span></p> <ul> <li>Gitは開発環境にインストール済み</li> <li>Unityプロジェクトは既に存在する</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>開発環境</strong></span></p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/OS%20X">OS X</a> 10.6.8</li> <li>Unity 4.5.5</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/MonoDevelop">MonoDevelop</a>-Unity 4.0.1</li> <li>Git 1.7.4.1</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>Unityの準備</strong></span></p> <ol> <li>Edit &gt; Project Settings &gt; EditorのInspector上で以下を設定<br /> <ul> <li>Version ControlのModeを<strong>Visible Meta Files</strong></li> <li>Asset SerializationのModeを<strong>Force Text</strong></li> </ul> </li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>UnityプロジェクトをGitの管理下に</strong></span></p> <ol> <li>Unityプロジェクトの直下に移動</li> <li>Gitの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>を作成<br />$ git init</li> <li>Gitでバージョン管理しないファイルを定義<br />(主に一時ファイルまたはユーザに依存する設定ファイル等)<br />$ vi .gitignore <blockquote>[Ll]ibrary/<br />[Tt]emp/<br />[Oo]bj/<br />[Bb]uild/<br /># Autogenerated VS/MD solution and project files<br />/*.csproj<br />/*.unityproj<br />/*.sln<br />/*.suo<br />/*.user<br />/*.userprefs<br />/*.pidb<br />/*.booproj<br />#Unity3D Generated File On Crash Reports<br />sysinfo.txt</blockquote> </li> <li>以降はGitに従ってバージョン管理</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>:リモー<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%EA%A5%DD%A5%B8">トリポジ</a>トリの登録(必要であれば)</strong></span></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>の<span style="color: #cc0000;">無料</span>プランは<span style="color: #cc0000;">プライベー<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%EA%A5%DD%A5%B8">トリポジ</a>トリを作れない</span>ので注意</p> <p>リモー<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%EA%A5%DD%A5%B8">トリポジ</a>トリの<span style="color: #008800;">アドレス</span>は適宜置き換えてください</p> <ol> <li>Unityプロジェクト(ローカル<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>)の直下に移動</li> <li>$ git remote add origin <span data-unlink><span style="color: #008800;"><strong>https</strong>://github.com/<strong>アカウント名</strong>/<strong>リポジトリ名</strong>.git</span></span></li> <li>$ git push -u origin master</li> </ol> hwks NGUIのUIRootについて hatenablog://entry/8454420450068023522 2014-10-14T03:44:42+09:00 2014-10-14T03:44:42+09:00 UIRootのプロパティ概略 Scaling Style : 拡縮 PixelPerfect : 基本的にそのまま表示する FixedSize : 解像度の縦幅に合わせて表示する FixedSizeOnMobiles : モバイル*1ならFixedSize、モバイル以外はPixelPerfect Manual Height : FixedSizeでのみ参照 Minimum Height : PixelPerfectでのみ参照 Maximum Height : PixelPerfectでのみ参照 前提条件として NGUI2.7 UIPanelの中心に追加した画像(UISprite)の表示のされ方… <p><span style="text-decoration: underline;"><span><strong>UIRootのプロパティ概略</strong></span></span></p> <ul> <li>Scaling Style : 拡縮<br /> <ul> <li><span style="color: #aaaa00;">PixelPerfect</span> : 基本的に<strong>そのまま</strong>表示する</li> <li><span style="color: #008800;">FixedSize</span> : 解像度の<strong>縦幅に合わせて</strong>表示する</li> <li>FixedSizeOnMobiles : モバイル<a href="#f-9a83318f" name="fn-9a83318f" title="iPhoneまたはAndroid">*1</a>なら<span style="color: #008800;">FixedSize</span>、モバイル以外は<span style="color: #aaaa00;">PixelPerfect</span></li> </ul> </li> <li>Manual Height : <span style="color: #008800;">FixedSize</span>でのみ参照</li> <li>Minimum Height : <span style="color: #aaaa00;">PixelPerfect</span>でのみ参照</li> <li>Maximum Height : <span style="color: #aaaa00;">PixelPerfect</span>でのみ参照</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>前提条件として</strong></span></p> <ul> <li>NGUI2.7</li> <li>UIPanelの中心に追加した画像(UISprite)の表示のされ方を確認</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>PixelPerfectを設定した場合</strong></span></p> <ul> <li>基本的に拡縮せず画面の解像度でそのまま表示する<br /> <ul> <li>解像度より小さい画像はそのまま小さく表示される</li> <li>解像度より大きい画像は解像度で切り取られて表示される</li> </ul> </li> <li><span style="color: #cc00cc;">例外</span>的に拡縮して表示する<br /> <ul> <li>解像度の縦幅がMinimum Height<span style="color: #cc00cc;">より小さい</span>場合は、Minimum Heightが解像度の縦幅に合わせて表示されるよう拡縮される</li> <li>解像度の縦幅がMaximum Height<span style="color: #cc00cc;">より大きい</span>場合は、Maximum Heightが解像度の縦幅に合わせて表示されるよう拡縮される</li> </ul> </li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>FixedSizeを設定した場合</strong></span></p> <ul> <li>Manual Heightが解像度の縦幅に合わせて表示されるよう拡縮される</li> </ul> <p> </p> <p><span style="text-decoration: underline;"><strong>まとめ</strong></span></p> <ul> <li>同じ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%B9%A5%DA%A5%AF%A5%C8%C8%E6">アスペクト比</a>のモバイルを前提とした<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%A3%BF%F4">複数</a>解像度対応であれば、画面サイズに合わせて動的に拡縮する以下の組み合わせが良さそうだと感じました<br /> <ul> <li>Scaling Style = FixedSize</li> <li>Manual Height = <em>基準にする縦幅</em></li> </ul> </li> </ul> <p> </p><div class="footnote"> <p class="footnote"><a href="#fn-9a83318f" name="f-9a83318f" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text"><a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>または<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a></span></p> </div> hwks Unityでダウンロードしたファイルの永続化と読み込み hatenablog://entry/8454420450066559113 2014-10-02T03:33:14+09:00 2014-10-02T03:47:41+09:00 ダウンロードしたリソース(csvファイル)をローカルに保存する&保存したリソースを読み込むサンプル ダウンロード&永続化 using UnityEngine;using System.Collections;using System.IO;public class WWWLoader : MonoBehaviour { IEnumerator Start () { WWW www = new WWW("http://127.0.0.1:8000/static/sample.csv"); while (!www.isDone) { // ダウンロードの進捗を表示 print(Mathf.Ceil… <p>ダウンロードしたリソース(<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a>ファイル)をローカルに保存する&保存したリソースを読み込むサンプル</p> <p> </p> <p><span style="text-decoration: underline;"><strong>ダウンロード&永続化</strong></span></p> <blockquote> <p>using UnityEngine;<br />using System.Collections;<br />using System.IO;<br /><br />public class WWWLoader : MonoBehaviour {<br /><br />     <span style="color: #cc0000;">IEnumerator</span> Start () {<br />        WWW www = new WWW("<span data-unlink>http://127.0.0.1:8000/static/<span style="color: #aaaa00;">sample.csv</span></span>");<br /><br />        while (!www.isDone) { <span style="color: #008800;">// ダウンロードの進捗を表示</span><br />            print(Mathf.CeilToInt(www.progress*100));<br />            <span style="color: #cc0000;">yield return null;</span><br />        }<br /><br />        if (!string.IsNullOrEmpty(www.<a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a>)) { <span style="color: #008800;">// ダウンロードでエラーが発生した</span><br />            print(www.<a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a>);<br />        } else { <span style="color: #008800;">// ダウンロードが正常に完了した</span><br />            File.WriteAllBytes(<span style="color: #cc00cc;">Application.persistentDataPath</span> + "/" + Path.GetFileName(www.url), www.bytes);<br />        }<br />    }<br />}</p> </blockquote> <p> </p> <p><span style="text-decoration: underline;"><strong>読み込み(WWWクラスを使う)<br /></strong></span></p> <blockquote> <p>using UnityEngine;<br />using System.Collections;<br /><br />public class FileLoader : MonoBehaviour {<br /><br />    <span style="color: #cc0000;">IEnumerator</span> Start () {<br />        WWW www = new WWW(<span style="color: #cc00cc;">"file://"</span> + <span style="color: #cc00cc;">Application.persistentDataPath</span> + "/<span style="color: #aaaa00;">sample.<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a></span>");<br />        <br />        while (!www.isDone) { <span style="color: #008800;">// 読み込みの進捗を表示</span><br />            print(Mathf.CeilToInt(www.progress*100));<br />            <span style="color: #cc0000;">yield return null;</span><br />        }<br />        <br />        if (!string.IsNullOrEmpty(www.<a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a>)) { <span style="color: #008800;">// 読み込みでエラーが発生した</span><br />            print(www.<a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a>);<br />        } else { <span style="color: #008800;">// 読み込みが正常に完了した</span><br />            print(www.text);<br />        }<br />    }<br />}</p> </blockquote> <p> </p> <p><span style="text-decoration: underline;"><strong>読み込み(Fileクラスを使う)</strong></span></p> <blockquote> <p>using UnityEngine;<br />using System.Collections;<br />using System.IO;<br /><br />public class FileLoader2 : MonoBehaviour {<br /><br />    void Start () {<br />        string text = File.ReadAllText(<span style="color: #cc00cc;">Application.persistentDataPath</span> + "/<span style="color: #aaaa00;">sample.<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a></span>");</p> <p>        print(text);<br />    }<br />}</p> </blockquote> <p> </p> <p><span style="text-decoration: underline;"><strong>補足</strong></span></p> <ul> <li>Fileクラスの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A5%BD%A5%C3%A5%C9">メソッド</a>は例外をcatchすべきかもしれません<br />(例えば存在しないファイルをFile.ReadAllTextした場合はFileNotFoundException<br />が発生する)</li> <li>大容量なファイルをFileクラスで入出力する場合は非同期な工夫が必要かもしれません</li> </ul> hwks UnityでWebページを表示する hatenablog://entry/12921228815733301749 2014-09-22T01:15:04+09:00 2014-10-02T01:06:06+09:00 WebViewプラグインのインストール https://github.com/gree/unity-webviewでDownload ZIP ダウンロードしたzipファイルを展開 Assets > Import Package > Custom Package... 2.で展開したディレクトリのdist/unity-webview.unitypackageを指定 Webページを表示するスクリプト 以下のスクリプトを適当なGameObjectにアタッチ#ifディレクティブはUnity FreeでPlayした際の「License error. This plugin is only support… <p><span style="text-decoration: underline;"><strong>WebView<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>のインストール</strong></span></p> <ol> <li><a href="https://github.com/gree/unity-webview">https://github.com/gree/unity-webview</a>でDownload ZIP</li> <li>ダウンロードしたzipファイルを展開</li> <li>Assets &gt; Import Package &gt; Custom Package...</li> <li>2.で展開したディレクトリのdist/unity-webview.unitypackageを指定</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>Webページを表示する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a></strong></span></p> <ol> <li>以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を適当なGameObjectにアタッチ<br /><span style="color: #cc00cc;">#if</span>ディレクティブは<span style="color: #cc00cc;">Unity Free</span>でPlayした際の「<span style="color: #cc0000;">License <a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a>. This plugin is only supported in Unity Pro!</span>」を回避するため<br /> <blockquote>using UnityEngine;<br /><br />public class SampleWebView : MonoBehaviour {<br /><br />    void Start () { <br />        <span style="color: #cc00cc;">#if !UNITY_EDITOR</span><br />        WebViewObject webViewObject = this.transform.gameObject.AddComponent&lt;WebViewObject&gt;();<br />        webViewObject.Init();<br />        webViewObject.LoadURL("<span data-unlink>http://example.com/</span>");<br />        webViewObject.SetVisibility(true);<br />        <span style="color: #cc00cc;">#endif</span><br />    }<br />}</blockquote> </li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>ビルド<br /></strong></span></p> <p>以下の「Unityを<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>実機で動かす」も参考</p> <p><a href="http://hwks.hatenadiary.jp/entry/2014/09/03/023017">http://hwks.hatenadiary.jp/entry/2014/09/03/023017</a></p> <ol> <li>File &gt; Build Settings...で<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>にSwitch Platform</li> <li>Player Settings... &gt; Other Settings &gt; Configuration &gt; Internet <a class="keyword" href="http://d.hatena.ne.jp/keyword/Access">Access</a>をRequire<br />(AndroidManifest.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a>に以下の定義を追加するため) <blockquote>&lt;uses-permission <a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a>:name="<a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a>.permission.INTERNET" /&gt;</blockquote> </li> <li>File &gt; Build &amp; Run</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>補足</strong></span></p> <ul> <li>指定したURLのWebページが<span style="color: #008800;">全画面で</span>表示されます</li> <li>表示したWebページ上でタップを有効にするにはAndroidManifest.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a>の以下の定義を修正します <blockquote>&lt;meta-data <a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a>:name="unityplayer.ForwardNativeEventsToDalvik" <a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a>:value="<span style="color: #cc00cc;">true</span>" /&gt;</blockquote> </li> <li><a href="https://github.com/gree/unity-webview/blob/master/sample/Assets/Scripts/SampleWebView.cs">https://github.com/gree/unity-webview/blob/master/sample/Assets/Scripts/SampleWebView.cs</a>も参考に</li> </ul> <p> </p> hwks UnityのAndroidビルドに失敗する hatenablog://entry/12921228815732770720 2014-09-13T15:39:38+09:00 2014-09-13T15:39:38+09:00 Android SDKを更新したどこかのタイミングで、以下のエラーが表示されてUnityでのAndroidビルドに失敗するようになりました (Android SDKのインストール先は環境による) Error building Player: Win32Exception: ApplicationName='/Applications/sdk/tools/zipalign', 対処法 パソコン内でzipalignを検索自分の場合は/Applications/sdk/build-tools/19.1.0直下に存在 ヒットしたzipalignを所定の位置にコピー cp -p /Application… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/SDK">SDK</a>を更新したどこかのタイミングで、以下のエラーが表示されてUnityでの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>ビルドに失敗するようになりました</p> <p>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/SDK">SDK</a>の<span style="color: #cc00cc;">インストール先</span>は環境による)</p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Error">Error</a> building Player: Win32Exception: ApplicationName='<span style="color: #cc00cc;">/Applications/<a class="keyword" href="http://d.hatena.ne.jp/keyword/sdk">sdk</a></span>/tools/zipalign',</p> </blockquote> <p> </p> <p><span style="text-decoration: underline;"><strong>対処法</strong></span></p> <ol> <li>パソコン内でzipalignを検索<br />自分の場合は<span style="color: #cc00cc;">/Applications/<a class="keyword" href="http://d.hatena.ne.jp/keyword/sdk">sdk</a></span>/build-tools/19.1.0直下に存在</li> <li>ヒットしたzipalignを所定の位置にコピー <blockquote>cp -p <span style="color: #cc00cc;">/Applications/<a class="keyword" href="http://d.hatena.ne.jp/keyword/sdk">sdk</a></span>/build-tools/19.1.0/zipalign <span style="color: #cc00cc;">/Applications/<a class="keyword" href="http://d.hatena.ne.jp/keyword/sdk">sdk</a></span>/tools/.</blockquote> </li> </ol> hwks UnityをAndroid実機で動かす hatenablog://entry/12921228815731904027 2014-09-03T02:30:17+09:00 2014-09-07T11:56:05+09:00 Android SDKの設定 以下の「Android SDKのインストール」を参考 http://hwks.hatenadiary.jp/entry/2014/06/10/010647 Android実機の設定 設定 > 開発者向けオプション > USBデバッグをチェック 設定 > ロックとセキュリティ > 提供元不明のアプリをチェック Unityの設定 Unity > Preferences... > External ToolsのAndroid SDK LocationにAndroid SDKのインストール先を指定する手順通りにインストールした場合は/Applications/sdkとなる… <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/SDK">SDK</a>の設定</strong></span></p> <p>以下の「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/SDK">SDK</a>のインストール」を参考</p> <p><a href="http://hwks.hatenadiary.jp/entry/2014/06/10/010647">http://hwks.hatenadiary.jp/entry/2014/06/10/010647</a></p> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>実機の設定</strong></span></p> <ol> <li>設定 &gt; 開発者向けオプション &gt; USB<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>をチェック</li> <li>設定 &gt; ロックとセキュリティ &gt; 提供元不明のアプリをチェック</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong> Unityの設定</strong></span></p> <ol> <li>Unity &gt; Preferences... &gt; External Toolsの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/SDK">SDK</a> Locationに<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/SDK">SDK</a>のインストール先を指定する<br />手順通りにインストールした場合は/Applications/<a class="keyword" href="http://d.hatena.ne.jp/keyword/sdk">sdk</a>となる</li> <li>File &gt; Build Settings... &gt; Platformで<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>にSwitch Platform</li> <li>File &gt; Build Settings... &gt; Player Settings... &gt; Other Settings &gt; Bundle Identifierの値を適当に変更する</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>Unityでビルド</strong></span></p> <ol> <li>USBケーブルでパソコンと<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>実機を接続する</li> <li>File &gt; Build &amp; Run</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>実機にインストールされアプリが起動する</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>補足</strong></span></p> <ul> <li>Assets/Plugins/<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>/AndroidManifest.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a> を配置することで、この設定がビルドの際に優先される(ビルド時に上書きまたは追加される項目もある)</li> </ul> hwks UnityでJSONレスポンスを読み込む hatenablog://entry/12921228815731536944 2014-08-31T18:20:06+09:00 2014-12-22T03:07:35+09:00 サーバから返されるJSON形式のレスポンスをUnityでパースするサンプル JsonFxのインストール http://www.jsonfx.net/download/ にアクセス JSON Serialization Library > JsonFx v1.x > Strongly-Signed Assemblies JsonSerializer_1.4.1003.3007_NetFx2.zip をダウンロード zipを展開してJsonFx.Json.dllをAssets/Pluginsにコピー 自分の環境(Unity4.3.3f1 Mono4.0.1)で正しく動くdllはこの組み合わせのみで… <p>サーバから返される<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>形式のレスポンスをUnityでパースするサンプル</p> <p> </p> <p><strong><span style="text-decoration: underline;">JsonFxのインストール</span></strong></p> <ol> <li><a href="http://www.jsonfx.net/download/">http://www.jsonfx.net/download/</a> にアクセス</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a> Serialization Library &gt; <span style="color: #cc00cc;">JsonFx v1.x</span> &gt; Strongly-Signed Assemblies</li> <li>JsonSerializer_1.4.1003.3007_<span style="color: #cc00cc;">NetFx2</span>.zip をダウンロード</li> <li>zipを展開してJsonFx.<a class="keyword" href="http://d.hatena.ne.jp/keyword/Json">Json</a>.dllをAssets/Pluginsにコピー</li> </ol> <p>自分の環境(Unity4.3.3f1 Mono4.0.1)で正しく動くdllはこの<span style="color: #cc00cc;">組み合わせ</span>のみでした</p> <p> </p> <p><strong><span style="text-decoration: underline;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>形式のレスポンスを返すURLを準備</span></strong></p> <p><span data-unlink>http://127.0.0.1:8000/debug/sample/</span> で以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>形式のレスポンスを返す</p> <blockquote> <p>{<br />    "name": "foo",<br />    "age": 24,<br />    "weight": 55.8,<br />    "married": true,<br />    "birthday": "1990-08-30 03:38:13",<br />    "friends": [<br />        {<br />            "name": "bar",<br />            "age": 25,<br />            "weight": 50.2,<br />            "married": false,<br />            "birthday": "1989-04-01 15:02:47"<br />        }<br />    ]<br />}</p> </blockquote> <p> </p> <p><strong><span style="text-decoration: underline;">JsonFxでパースしてデ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%EA%A5%A2%A5%E9%A5%A4%A5%BA">シリアライズ</a></span></strong></p> <p>Unityの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>から<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>を読み込む</p> <blockquote> <p>using UnityEngine;<br />using JsonFx;<br />using System;<br />using System.Collections;<br />using System.Collections.Generic;<br /><br />public class JSONLoader : MonoBehaviour {<br />    IEnumerator Start () {<br />        WWW www = new WWW("<span data-unlink>http://127.0.0.1:8000/debug/sample/</span>");<br />        yield return www;<br /><br />        <span style="color: #cc00cc;">Person</span> person = JsonFx.<a class="keyword" href="http://d.hatena.ne.jp/keyword/Json">Json</a>.JsonReader.Deserialize&lt;<span style="color: #cc00cc;">Person</span>&gt;(www.text);<br />    }<br />}<br /><br />public class <span style="color: #cc00cc;">Person</span> {<br />    public string name;<br />    public int age;<br />    public float weight;<br />    public bool married;<br />    public DateTime birthday;<br />    public List&lt;<span style="color: #cc00cc;">Person</span>&gt; friends;<br />}</p> </blockquote> <p> </p> <p><strong><span style="text-decoration: underline;">まとめ</span></strong></p> <p>パーサとしてMiniJSONという選択肢もありますが、パース後にデ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%EA%A5%A2%A5%E9%A5%A4%A5%BA">シリアライズ</a>までやってくれるJsonFxを今回は選択</p> hwks UnityでWWWクラスを使ってファイルをダウンロード hatenablog://entry/12921228815731082498 2014-08-25T02:31:00+09:00 2014-09-29T02:35:13+09:00 リソースファイルをWWWクラスでダウンロードするサンプル リソースファイルにhttpでアクセスできるよう配置 配置したリソースファイルをWWWクラスでUnityのスクリプトから読み込む using UnityEngine;using System.Collections;public class WWWLoader : MonoBehaviour { IEnumerator Start () { WWW www = new WWW("http://127.0.0.1:8000/static/sample.csv"); while (!www.isDone) { // ダウンロードの進捗を表示 … <p>リソースファイルをWWWクラスでダウンロードするサンプル</p> <ol> <li>リソースファイルにhttpでアクセスできるよう配置</li> <li>配置したリソースファイルをWWWクラスでUnityの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>から読み込む <blockquote>using UnityEngine;<br />using System.Collections;<br /><br />public class WWWLoader : MonoBehaviour {<br /><br />     <span style="color: #cc0000;">IEnumerator</span> Start () {<br />        WWW www = new WWW("<span data-unlink><span style="color: #cc00cc;">http://127.0.0.1:8000/static/sample.csv</span></span>");<br /><br />        while (!www.isDone) { <span style="color: #008800;">// ダウンロードの進捗を表示</span><br />            print(Mathf.CeilToInt(www.progress*100));<br />            <span style="color: #cc0000;">yield return null;</span><br />        }<br /><br />        if (!string.IsNullOrEmpty(www.<a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a>)) { <span style="color: #008800;">// ダウンロードでエラーが発生した</span><br />            print(www.<a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a>);<br />        } else { <span style="color: #008800;">// ダウンロードが正常に完了した</span><br />            print(www.text);<br />        }<br />    }<br />}</blockquote> </li> </ol> <ul> <li>ダウンロードを非同期で行うため、Start()<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A5%BD%A5%C3%A5%C9">メソッド</a>の戻り値はvoidではなくIEnumeratorに変更しています</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BF%A5%A4%A5%E0%A5%A2%A5%A6%A5%C8">タイムアウト</a>を考慮していません(リクエストが正しく行われた場合はレスポンスを待ち続けます)</li> </ul> <p>WWWクラスについての詳細は以下の公式ドキュメントを参考に</p> <p><a href="http://docs.unity3d.com/ScriptReference/WWW.html">http://docs.unity3d.com/ScriptReference/WWW.html</a></p> hwks UnityでCSVファイルを読み込む hatenablog://entry/12921228815729434546 2014-08-03T02:32:35+09:00 2014-08-31T20:57:18+09:00 CSVに限らずテキストファイルをUnityで読み込みたい場合のサンプル 読み込ませるテキストファイルをResources以下に配置(以降前提としてAssets/Resources/CSV/sample.csv) 配置したテキストファイルをUnityのスクリプトから読み込む using UnityEngine;using System.IO;public class CSVLoader : MonoBehaviour { void Start () { TextAsset csv = Resources.Load("CSV/sample") as TextAsset; StringReader … <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a>に限らずテキ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C8%A5%D5%A5%A1%A5%A4">ストファイ</a>ルをUnityで読み込みたい場合のサンプル</p> <ol> <li>読み込ませるテキ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C8%A5%D5%A5%A1%A5%A4">ストファイ</a>ルをResources以下に配置<br />(以降前提としてAssets/<span style="color: #cc00cc;">Resources</span>/<span style="color: #cc0000;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a>/sample</span>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a>)</li> <li>配置したテキ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%C8%A5%D5%A5%A1%A5%A4">ストファイ</a>ルをUnityの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>から読み込む <blockquote>using UnityEngine;<br />using System.IO;<br /><br />public class CSVLoader : MonoBehaviour {<br /><br />    void Start () {<br />        TextAsset <a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a> = <span style="color: #cc00cc;">Resources</span>.Load("<span style="color: #cc0000;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/CSV">CSV</a>/sample</span>") as TextAsset;<br />        StringReader reader = new StringReader(<a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a>.text);<br />        while (reader.Peek() &gt; -1) {<br />            string line = reader.<a class="keyword" href="http://d.hatena.ne.jp/keyword/ReadLine">ReadLine</a>();<br />            string[] values = line.Split(',');<br />        }<br />    }<br />}</blockquote> </li> </ol> <p> </p> <p>TextAssetについての詳細は以下の公式ドキュメントを参考に</p> <p><a href="http://docs.unity3d.com/Manual/class-TextAsset.html">http://docs.unity3d.com/Manual/class-TextAsset.html</a></p> hwks UnityでWebSocket通信 hatenablog://entry/12921228815728477496 2014-07-20T02:22:29+09:00 2015-06-08T21:43:46+09:00 node.jsのインストール http://nodejs.org/ http://nodejs.org/download にアクセス Mac OS X Installer (.pkg) をダウンロードしてインストール wsモジュールのインストール http://einaros.github.io/ws/ $ npm install -g ws -gでグローバルにインストールしています 必要であればsudo付で実行します 以下の環境変数を追加 export NODE_PATH=/usr/local/lib/node_modules websocket-sharpのインストール http://st… <p><span style="text-decoration: underline;"><strong>node.jsのインストール</strong></span></p> <p><strong><a href="http://nodejs.org/">http://nodejs.org/</a></strong></p> <ol> <li><a href="http://nodejs.org/download">http://nodejs.org/download</a> にアクセス</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac%20OS%20X">Mac OS X</a> Installer (.pkg) をダウンロードしてインストール</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>wsモジュールのインストール</strong></span></p> <p><strong><a href="http://einaros.github.io/ws/">http://einaros.github.io/ws/</a></strong></p> <ol> <li>$ npm install -g ws<br /> <ul> <li>-gでグローバルにインストールしています</li> <li>必要であればsudo付で実行します</li> </ul> </li> <li>以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>を追加 <blockquote>export NODE_PATH=/usr/local/lib/node_modules</blockquote> </li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>websocket-<a class="keyword" href="http://d.hatena.ne.jp/keyword/sharp">sharp</a>のインストール</strong></span></p> <p><strong><a href="http://sta.github.io/websocket-sharp/">http://sta.github.io/websocket-sharp/</a></strong></p> <ol> <li>$ git clone <a href="https://github.com/sta/websocket-sharp.git">https://github.com/sta/websocket-sharp.git</a></li> <li>websocket-<a class="keyword" href="http://d.hatena.ne.jp/keyword/sharp">sharp</a>.sln を開く(以降<a class="keyword" href="http://d.hatena.ne.jp/keyword/MonoDevelop">MonoDevelop</a>-Unityを前提)</li> <li>ソリューションからwebsocket-<a class="keyword" href="http://d.hatena.ne.jp/keyword/sharp">sharp</a>を右クリックしてビルド<br /> <ul> <li>Exampleはビルドしない</li> </ul> </li> <li>/websocket-<a class="keyword" href="http://d.hatena.ne.jp/keyword/sharp">sharp</a>/websocket-<a class="keyword" href="http://d.hatena.ne.jp/keyword/sharp">sharp</a>/bin/Debug/websocket-<a class="keyword" href="http://d.hatena.ne.jp/keyword/sharp">sharp</a>.dllをUnityプロジェクトのAssets/Pluginsにコピー</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>WebSocketサーバを立ち上げる</strong></span></p> <ol> <li>以下のようなWebSocket用サーバjsファイルを適当な場所に作成<br />$ vi server.js<br /> <blockquote>var WebSocketServer = require('ws').Server<br />, <a class="keyword" href="http://d.hatena.ne.jp/keyword/wss">wss</a> = new WebSocketServer({port: 8080});<br /><a class="keyword" href="http://d.hatena.ne.jp/keyword/wss">wss</a>.on('connection', function(ws) {<br />ws.on('message', function(message) {<br />console.log('<span style="color: #cc00cc;">received</span>: %s', message);<br />});<br />ws.send('<span style="color: #cc0000;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/something">something</a></span>');<br />});</blockquote> <ul> <li>中身は <a href="http://einaros.github.io/ws/">http://einaros.github.io/ws/</a> のexample server use:まま</li> </ul> </li> <li>$ node server.js</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>WebSocketクライアントをUnityで立ち上げる</strong></span></p> <ol> <li>以下のような<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>を適当なGameObjectにアタッチして実行 <blockquote><span style="font-family: Menlo; font-size: 80%;"><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">;</span><br /><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">WebSocketSharp</span><span style="color: #444444;">;</span><br /><br /><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #009695;">class</span><span style="color: #444444;"> </span><span style="color: #444444;">WebSocketClient</span><span style="color: #444444;"> : </span><span style="color: #3363a4;">MonoBehaviour</span><span style="color: #444444;"> {</span><br /><span style="color: #444444;">    </span><br /><span style="color: #444444;">    </span><span style="color: #009695;">private</span><span style="color: #444444;"> </span><span style="color: #444444;">WebSocket</span><span style="color: #444444;"> </span><span style="color: #444444;">ws</span><span style="color: #444444;">;</span><br /><span style="color: #444444;">    </span><br /><span style="color: #444444;">    </span><span style="color: #3363a4;">void</span><span style="color: #444444;"> </span><span style="color: #444444;">OnGUI</span><span style="color: #444444;">() {</span><br /><span style="color: #444444;">        </span><span style="color: #009695;">if</span><span style="color: #444444;"> (</span><span style="color: #3363a4;">GUILayout</span><span style="color: #444444;">.</span><span style="color: #444444;">Button</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Connect</span><span style="color: #f57c00;">"</span><span style="color: #444444;">)) {</span><br /><span style="color: #444444;">            </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">ws</span><span style="color: #444444;"> = </span><span style="color: #009695;">new</span><span style="color: #444444;"> </span><span style="color: #444444;">WebSocket</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">ws://<a class="keyword" href="http://d.hatena.ne.jp/keyword/127.0.0.1">127.0.0.1</a>:8080</span><span style="color: #f57c00;">"</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">            </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">ws</span><span style="color: #444444;">.</span><span style="color: #444444;">OnMessage</span><span style="color: #444444;"> += (</span><span style="color: #3363a4;">object</span><span style="color: #444444;"> </span><span style="color: #444444;">sender</span><span style="color: #444444;">, </span><span style="color: #444444;">MessageEventArgs</span><span style="color: #444444;"> </span><span style="color: #444444;">e</span><span style="color: #444444;">) =&gt; {</span><br /><span style="color: #444444;">                </span><span style="color: #444444;">print</span><span style="color: #444444;"> (</span><span style="color: #444444;">e</span><span style="color: #444444;">.</span><span style="color: #444444;">Data</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">            };</span><br /><span style="color: #444444;">            </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">ws</span><span style="color: #444444;">.</span><span style="color: #444444;">Connect</span><span style="color: #444444;"> ();</span><br /><span style="color: #444444;">        }</span><br /><span style="color: #444444;">        </span><br /><span style="color: #444444;">        </span><span style="color: #009695;">if</span><span style="color: #444444;"> (</span><span style="color: #3363a4;">GUILayout</span><span style="color: #444444;">.</span><span style="color: #444444;">Button</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Send</span><span style="color: #f57c00;">"</span><span style="color: #444444;">)) {</span><br /><span style="color: #444444;">            </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">ws</span><span style="color: #444444;">.</span><span style="color: #444444;">Send</span><span style="color: #444444;"> (</span><span style="color: #444444;">System</span><span style="color: #444444;">.</span><span style="color: #444444;">DateTime</span><span style="color: #444444;">.</span><span style="color: #444444;">Now</span><span style="color: #444444;">.</span><span style="color: #444444;">ToString</span><span style="color: #444444;"> ());</span><br /><span style="color: #444444;">        }</span><br /><span style="color: #444444;">        </span><br /><span style="color: #444444;">        </span><span style="color: #009695;">if</span><span style="color: #444444;"> (</span><span style="color: #3363a4;">GUILayout</span><span style="color: #444444;">.</span><span style="color: #444444;">Button</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Close</span><span style="color: #f57c00;">"</span><span style="color: #444444;">)) {</span><br /><span style="color: #444444;">            </span><span style="color: #009695;">this</span><span style="color: #444444;">.</span><span style="color: #444444;">ws</span><span style="color: #444444;">.</span><span style="color: #444444;">Close</span><span style="color: #444444;"> ();</span><br /><span style="color: #444444;">        }</span><br /><span style="color: #444444;">    }</span><br /><span style="color: #444444;">}</span></span></blockquote> </li> <li>Connectボタンを押すとWebSocketサーバ(node.js+ws)に接続し、Console上に<span style="color: #cc0000;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/something">something</a></span>と表示される</li> <li>Sendボタンを押すとターミナル上に現在日時が以下のように表示される<br /><span style="color: #cc00cc;">received</span>: 07/20/2014 01:57:28</li> <li>Closeボタンを押すとWebSocketサーバと切断する</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>まとめ</strong></span></p> <p>ミニマムな環境構築と動作確認は驚くほど簡単</p> <p> </p> <p><span style="text-decoration: underline;"><strong>補足</strong></span></p> <p><span style="text-decoration: line-through;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>へのビルドは<strong><span style="color: #008800; text-decoration: line-through;">Pro</span></strong>のみのようです</span></p> <p>Unity5からPersonal(無料版)でもビルドが出来るようになったようです</p> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Error">Error</a> building Player: SystemException: 'System.Net.Sockets' are <strong><span style="color: #008800;">supported only with Unity <a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> Pro</span></strong>. Referenced from assembly 'websocket-<a class="keyword" href="http://d.hatena.ne.jp/keyword/sharp">sharp</a>'.</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Error">Error</a> building Player: SystemException: System.Net.Sockets are <strong><span style="color: #008800;">supported only on Unity <a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> Pro</span></strong>. Referenced from assembly 'websocket-<a class="keyword" href="http://d.hatena.ne.jp/keyword/sharp">sharp</a>'.</li> </ul> <p> </p> <p>socket.io モジュールを使った実装も参考までに</p> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="UnityでSocket.IO - チラ裏Unity" src="http://hwks.hatenadiary.jp/embed/2015/06/06/033353" frameborder="0" scrolling="no"><a href="http://hwks.hatenadiary.jp/entry/2015/06/06/033353">UnityでSocket.IO - チラ裏Unity</a></iframe></p> hwks NGUIで縦持ち解像度対応 hatenablog://entry/12921228815728089911 2014-07-14T01:41:27+09:00 2014-10-16T01:17:02+09:00 以下のような縦持ちゲームの(よくある黒帯)解像度対応をNGUIで行うためには http://schoolgirlstrikers.jp/camp1407/ の壁紙使用 iPhone4(640x960) iPhone5(640x1136) 解像度640x960の壁紙をUISpriteとしてUIPanel下に追加(解像度が調整されていることを確認するため) UIRootのScalingStyleをFixedSizeに変更 以下のスクリプトをUIRootにアタッチする using UnityEngine;[ExecuteInEditMode]public class UIRootVerticalAd… <p>以下のような縦持ちゲームの(よくある黒帯)解像度対応をNGUIで行うためには</p> <p><a href="http://schoolgirlstrikers.jp/camp1407/">http://schoolgirlstrikers.jp/camp1407/</a> の壁紙使用</p> <ul> <li>iPhone4(640x960)<br /> <p><img class="hatena-fotolife" title="f:id:hwks:20140714004547p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20140714/20140714004547.png" alt="f:id:hwks:20140714004547p:plain" width="235" /></p> </li> <li> <p> <a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone5">iPhone5</a>(640x1136)</p> <p><img class="hatena-fotolife" title="f:id:hwks:20140714004650p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20140714/20140714004650.png" alt="f:id:hwks:20140714004650p:plain" width="235" /></p> </li> </ul> <p> </p> <ol> <li>解像度640x960の壁紙をUISpriteとしてUIPanel下に追加<br />(解像度が調整されていることを確認するため)</li> <li>UIRootのScalingStyleをFixedSizeに変更</li> <li>以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>をUIRootにアタッチする <blockquote>using UnityEngine;<br /><br />[ExecuteInEditMode]<br />public class UIRootVerticalAdjuster : MonoBehaviour {<br />    <br />    public int manualWidth = 640;<br />    <br />    void Update () {<br />        UIRoot root = this.GetComponent&lt;UIRoot&gt; ();<br />        root.manualHeight = Mathf.FloorToInt (Screen.height * this.manualWidth / Screen.width);<br />    }<br />}</blockquote> </li> <li>UIRoot下のCameraのBackgroundをRGB000に変更</li> <li>Gameビューで解像度を切り替えて試してみる</li> </ol> <p> </p> <p>補足として</p> <ul> <li>manualWidthは基準となる横幅を設定する</li> <li>Updateで調整している(&ExecuteInEditMode)のはUnityEditor上で確認するためなので、実運用時は要修正</li> </ul> hwks Unityで位置情報を取得 hatenablog://entry/12921228815727573451 2014-07-06T17:52:24+09:00 2015-06-04T16:36:27+09:00 Unityの準備 http://docs.unity3d.com/ScriptReference/LocationService.Start.html のサンプルソースを使います C#の場合、そのまま使うと以下のエラーになるので error CS0126: An object of a type convertible to `bool' is required for the return statement 文中のreturn;をyield break;に修正 using UnityEngine;using System.Collections;public class GPSLoader… <p><span style="text-decoration: underline;"><strong>Unityの準備</strong></span></p> <ol> <li><a href="http://docs.unity3d.com/ScriptReference/LocationService.Start.html">http://docs.unity3d.com/ScriptReference/LocationService.Start.html</a> の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%F3%A5%D7%A5%EB%A5%BD%A1%BC%A5%B9">サンプルソース</a>を使います</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/C%23">C#</a>の場合、そのまま使うと以下のエラーになるので<br /> <blockquote> <p><span style="color: #cc0000;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/error">error</a> CS0126: An object of a type convertible to `bool' is required for the return statement</span></p> </blockquote> <span style="color: #cc0000;"><span style="color: #000000;">文中の<span style="color: #cc0000;">return;</span>を<span style="color: #cc0000;"><strong>yield break;</strong></span>に修正</span></span> <blockquote><span style="font-family: Menlo; font-size: 80%;"><span style="color: #009695;"><span style="font-family: Menlo;"><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">UnityEngine</span><span style="color: #444444;">;</span><br /><span style="color: #009695;">using</span><span style="color: #444444;"> </span><span style="color: #444444;">System</span><span style="color: #444444;">.</span><span style="color: #444444;">Collections</span><span style="color: #444444;">;</span><br /><br /><span style="color: #009695;">public</span><span style="color: #444444;"> </span><span style="color: #009695;">class</span><span style="color: #444444;"> </span><span style="color: #444444;">GPSLoader</span><span style="color: #444444;"> : </span><span style="color: #3363a4;">MonoBehaviour</span><span style="color: #444444;"> {</span><br /><span style="color: #444444;">    </span><span style="color: #444444;">IEnumerator</span><span style="color: #444444;"> </span><span style="color: #444444;">Start</span><span style="color: #444444;">() {</span><br /><span style="color: #444444;">        </span><span style="color: #009695;">if</span><span style="color: #444444;"> (!</span><span style="color: #3363a4;">Input</span><span style="color: #444444;">.</span><span style="color: #444444;">location</span><span style="color: #444444;">.</span><span style="color: #444444;">isEnabledByUser</span><span style="color: #444444;">) {</span><br /><span style="color: #444444;">            </span><span style="color: #009695;">yield</span><span style="color: #444444;"> </span><span style="color: #009695;">break</span><span style="color: #444444;">;</span><br /><span style="color: #444444;">        }</span><br /><span style="color: #444444;">        </span><span style="color: #3363a4;">Input</span><span style="color: #444444;">.</span><span style="color: #444444;">location</span><span style="color: #444444;">.</span><span style="color: #444444;">Start</span><span style="color: #444444;">();</span><br /><span style="color: #444444;">        </span><span style="color: #3363a4;">int</span><span style="color: #444444;"> </span><span style="color: #444444;">maxWait</span><span style="color: #444444;"> =  </span><span style="color: #f57c00;">120</span><span style="color: #444444;">;</span><br /><span style="color: #444444;">        </span><span style="color: #009695;">while</span><span style="color: #444444;"> (</span><span style="color: #3363a4;">Input</span><span style="color: #444444;">.</span><span style="color: #444444;">location</span><span style="color: #444444;">.</span><span style="color: #444444;">status</span><span style="color: #444444;"> == </span><span style="color: #3363a4;">LocationServiceStatus</span><span style="color: #444444;">.</span><span style="color: #444444;">Initializing</span><span style="color: #444444;"> &amp;&amp; </span><span style="color: #444444;">maxWait</span><span style="color: #444444;"> &gt; </span><span style="color: #f57c00;">0</span><span style="color: #444444;">) {</span><br /><span style="color: #444444;">            </span><span style="color: #009695;">yield</span><span style="color: #444444;"> </span><span style="color: #009695;">return</span><span style="color: #444444;"> </span><span style="color: #009695;">new</span><span style="color: #444444;"> </span><span style="color: #3363a4;">WaitForSeconds</span><span style="color: #444444;">(</span><span style="color: #f57c00;">1</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">            </span><span style="color: #444444;">maxWait</span><span style="color: #444444;">--;</span><br /><span style="color: #444444;">        }</span><br /><span style="color: #444444;">        </span><span style="color: #009695;">if</span><span style="color: #444444;"> (</span><span style="color: #444444;">maxWait</span><span style="color: #444444;"> &lt; </span><span style="color: #f57c00;">1</span><span style="color: #444444;">) {</span><br /><span style="color: #444444;">            </span><span style="color: #444444;">print</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Timed out</span><span style="color: #f57c00;">"</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">            </span><span style="color: #009695;">yield</span><span style="color: #444444;"> </span><span style="color: #009695;">break</span><span style="color: #444444;">;</span><br /><span style="color: #444444;">        }</span><br /><span style="color: #444444;">        </span><span style="color: #009695;">if</span><span style="color: #444444;"> (</span><span style="color: #3363a4;">Input</span><span style="color: #444444;">.</span><span style="color: #444444;">location</span><span style="color: #444444;">.</span><span style="color: #444444;">status</span><span style="color: #444444;"> == </span><span style="color: #3363a4;">LocationServiceStatus</span><span style="color: #444444;">.</span><span style="color: #444444;">Failed</span><span style="color: #444444;">) {</span><br /><span style="color: #444444;">            </span><span style="color: #444444;">print</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Unable to determine device location</span><span style="color: #f57c00;">"</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">            </span><span style="color: #009695;">yield</span><span style="color: #444444;"> </span><span style="color: #009695;">break</span><span style="color: #444444;">;</span><br /><span style="color: #444444;">        } </span><span style="color: #009695;">else</span><span style="color: #444444;"> {</span><br /><span style="color: #444444;">            </span><span style="color: #444444;">print</span><span style="color: #444444;">(</span><span style="color: #f57c00;">"</span><span style="color: #f57c00;">Location: </span><span style="color: #f57c00;">"</span><span style="color: #444444;"> + </span><br /><span style="color: #444444;">                  </span><span style="color: #3363a4;">Input</span><span style="color: #444444;">.</span><span style="color: #444444;">location</span><span style="color: #444444;">.</span><span style="color: #444444;">lastData</span><span style="color: #444444;">.</span><span style="color: #444444;">latitude</span><span style="color: #444444;"> + </span><span style="color: #f57c00;">"</span><span style="color: #f57c00;"> </span><span style="color: #f57c00;">"</span><span style="color: #444444;"> + </span><br /><span style="color: #444444;">                  </span><span style="color: #3363a4;">Input</span><span style="color: #444444;">.</span><span style="color: #444444;">location</span><span style="color: #444444;">.</span><span style="color: #444444;">lastData</span><span style="color: #444444;">.</span><span style="color: #444444;">longitude</span><span style="color: #444444;"> + </span><span style="color: #f57c00;">"</span><span style="color: #f57c00;"> </span><span style="color: #f57c00;">"</span><span style="color: #444444;"> + </span><br /><span style="color: #444444;">                  </span><span style="color: #3363a4;">Input</span><span style="color: #444444;">.</span><span style="color: #444444;">location</span><span style="color: #444444;">.</span><span style="color: #444444;">lastData</span><span style="color: #444444;">.</span><span style="color: #444444;">altitude</span><span style="color: #444444;"> + </span><span style="color: #f57c00;">"</span><span style="color: #f57c00;"> </span><span style="color: #f57c00;">"</span><span style="color: #444444;"> + </span><br /><span style="color: #444444;">                  </span><span style="color: #3363a4;">Input</span><span style="color: #444444;">.</span><span style="color: #444444;">location</span><span style="color: #444444;">.</span><span style="color: #444444;">lastData</span><span style="color: #444444;">.</span><span style="color: #444444;">horizontalAccuracy</span><span style="color: #444444;"> + </span><span style="color: #f57c00;">"</span><span style="color: #f57c00;"> </span><span style="color: #f57c00;">"</span><span style="color: #444444;"> + </span><br /><span style="color: #444444;">                  </span><span style="color: #3363a4;">Input</span><span style="color: #444444;">.</span><span style="color: #444444;">location</span><span style="color: #444444;">.</span><span style="color: #444444;">lastData</span><span style="color: #444444;">.</span><span style="color: #444444;">timestamp</span><span style="color: #444444;">);</span><br /><span style="color: #444444;">        }</span><br /><span style="color: #444444;">        </span><span style="color: #3363a4;">Input</span><span style="color: #444444;">.</span><span style="color: #444444;">location</span><span style="color: #444444;">.</span><span style="color: #444444;">Stop</span><span style="color: #444444;">();</span><br /><span style="color: #444444;">    }</span><br /><span style="color: #444444;">}</span></span></span><span style="color: #444444;"><br /></span></span></blockquote> </li> <li>適当なGameObjectにアタッチ</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>実機の準備</strong></span></p> <p>(機種によってメニューの項目名が異なるかもしれません)</p> <ol> <li>設定 &gt; 位置情報サービス &gt; <a class="keyword" href="http://d.hatena.ne.jp/keyword/GPS">GPS</a>機能の使用にチェック</li> <li>設定 &gt; 位置情報サービス &gt; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google">Google</a>の位置情報にチェック</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>実機の準備</strong></span></p> <p>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>のバージョンによって項目名が異なるかもしれません)</p> <ol> <li>設定 &gt; プライバシー &gt; 位置情報サービス にチェック</li> <li>このアプリに対して位置情報の利用を許可<br />(アプリ初回起動時に確認ダイアログが表示される)</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>実機で動作確認</strong></span></p> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="UnityをAndroid実機で動かす - チラ裏Unity" src="http://hwks.hatenadiary.jp/embed/2014/09/03/023017" frameborder="0" scrolling="no"><a href="http://hwks.hatenadiary.jp/entry/2014/09/03/023017">UnityをAndroid実機で動かす - チラ裏Unity</a></iframe></p> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="UnityをiPhone実機で動かす - チラ裏Unity" src="http://hwks.hatenadiary.jp/embed/2015/05/12/185726" frameborder="0" scrolling="no"><a href="http://hwks.hatenadiary.jp/entry/2015/05/12/185726">UnityをiPhone実機で動かす - チラ裏Unit</a></iframe></p> <p> </p> <p><span style="text-decoration: underline;"><strong>補足</strong></span></p> <ul> <li>位置情報を扱うには以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>が AndroidManifest.<a class="keyword" href="http://d.hatena.ne.jp/keyword/xml">xml</a> に必要です <blockquote>&lt;uses-permission <a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a>:name="<a class="keyword" href="http://d.hatena.ne.jp/keyword/android">android</a>.permission.<a class="keyword" href="http://d.hatena.ne.jp/keyword/ACCESS">ACCESS</a>_FINE_LOCATION" /&gt;</blockquote> </li> <li>位置情報クラスの詳細については以下を参考<br /><a href="http://docs.unity3d.com/ScriptReference/LocationInfo.html">http://docs.unity3d.com/ScriptReference/LocationInfo.html</a></li> </ul> <p> </p> hwks Djangoの開発環境構築 hatenablog://entry/12921228815727411251 2014-07-04T16:15:47+09:00 2016-05-08T13:55:24+09:00 オンラインゲームを作ろうと思った場合に必要なサーバ構築 その1つの手段としてDjango(Python)を選んだ際の開発環境構築メモ Xcodeをインストール https://developer.apple.com/xcode/ にアクセス View in Mac App Storeを押下して App Store よりダウンロード&インストール Xcodeを起動し、Preferences->Downloads より Command Line Tools をインストール 正しくインストールされたか一応確認$ which gcc gitをインストール(必要であれば) http://code.goo… <p>オンラインゲームを作ろうと思った場合に必要なサーバ構築</p> <p>その1つの手段として<a class="keyword" href="http://d.hatena.ne.jp/keyword/Django">Django</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a>)を選んだ際の開発環境構築メモ</p> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>をインストール</strong></span></p> <ol> <li><a href="https://developer.apple.com/xcode/">https://developer.apple.com/xcode/</a> にアクセス</li> <li>View in <a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/App%20Store">App Store</a>を押下して <a class="keyword" href="http://d.hatena.ne.jp/keyword/App%20Store">App Store</a> よりダウンロード&インストール</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/Xcode">Xcode</a>を起動し、Preferences-&gt;Downloads より Command Line Tools をインストール</li> <li>正しくインストールされたか一応確認<br />$ which <a class="keyword" href="http://d.hatena.ne.jp/keyword/gcc">gcc</a>  </li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>gitをインストール(必要であれば)</strong></span></p> <ol> <li><a href="http://code.google.com/p/git-osx-installer">http://code.google.com/p/git-osx-installer</a> にアクセス</li> <li>最新っぽい<a class="keyword" href="http://d.hatena.ne.jp/keyword/dmg">dmg</a>を選ぶ(git-1.8.4.2-<a class="keyword" href="http://d.hatena.ne.jp/keyword/intel">intel</a>-universal-snow-<a class="keyword" href="http://d.hatena.ne.jp/keyword/leopard">leopard</a>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/dmg">dmg</a>)</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>pipをインストール</strong></span></p> <ol> <li> <p>$ sudo easy_install pip  </p> </li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>virtualenvをインストール(<span style="color: #0433ff; text-decoration: underline;">sample</span>という名前の仮想環境作成)</strong></span></p> <p><a href="https://pypi.python.org/pypi/virtualenv">https://pypi.python.org/pypi/virtualenv</a><br /><a href="https://pypi.python.org/pypi/virtualenvwrapper">https://pypi.python.org/pypi/virtualenvwrapper</a></p> <ol> <li>$ sudo pip install virtualenv</li> <li>$ sudo pip install virtualenvwrapper</li> <li>$ source /usr/local/bin/virtualenvwrapper.sh</li> <li>$ mkvirtualenv --no-site-packages <span style="color: #0433ff;">sample</span></li> <li>$ vi ~/.virtualenvs/<span style="color: #0433ff;">sample</span>/lib/python2.7/site-packages/sitecustomize.py <blockquote> <p>import sys</p> <p>sys.setdefaultencoding('<a class="keyword" href="http://d.hatena.ne.jp/keyword/utf-8">utf-8</a>')</p> </blockquote> </li> <li> <p> 3. は.bashrc等に追記してシェル起動時に読み込ませる</p> </li> <li>詳細は以下のドキュメント(日本語)に<br /><a href="http://virtualenvwrapper-docs-ja.readthedocs.org/en/latest/index.html">http://virtualenvwrapper-docs-ja.readthedocs.org/en/latest/index.html</a></li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/MySQL">MySQL</a>をインストール</strong></span></p> <ol> <li><span style="line-height: 1.5;"> <a href="http://downloads.mysql.com/archives.php">http://downloads.mysql.com/archives.php</a> にアクセス</span></li> <li>最新っぽい<a class="keyword" href="http://d.hatena.ne.jp/keyword/dmg">dmg</a>を選ぶ(<a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>-5.6.17-osx10.7-<a class="keyword" href="http://d.hatena.ne.jp/keyword/x86">x86</a>_64.<a class="keyword" href="http://d.hatena.ne.jp/keyword/dmg">dmg</a>)</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>-5.*.pkg を実行</li> <li>MySQLStartupItem.pkg を実行</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/MySQL">MySQL</a>.prefPane をシステム環境設定ウィンドウにドラッグ</li> <li>export PATH=/usr/local/<a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>/bin:$PATH</li> <li>$ sudo vi /etc/my.cnf <blockquote> <p>[client]<br />default-character-set = utf8<br />port = 3306</p> <p>[mysqldump]<br />default-character-set = utf8</p> <p>[<a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>]<br />default-character-set = utf8</p> <p>[mysqld]<br />default-storage-engine = <a class="keyword" href="http://d.hatena.ne.jp/keyword/InnoDB">InnoDB</a><br />character-set-server = utf8<br />collation-server = utf8_general_ci</p> </blockquote> </li> <li>$ sudo ln -s /usr/local/<a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>/lib/libmysqlclient.dylib /usr/lib/.</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>必要なライブラリをインストール</strong></span></p> <ol> <li>$ sudo pip install <a class="keyword" href="http://d.hatena.ne.jp/keyword/Django">Django</a></li> <li>$ sudo pip install <a class="keyword" href="http://d.hatena.ne.jp/keyword/MySQL-python">MySQL-python</a></li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong><a class="keyword" href="http://d.hatena.ne.jp/keyword/Django">Django</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>開始</strong></span></p> <ol> <li>仮想環境で作業開始<br />$ workon <span style="color: #0000cc;">sample</span></li> <li>データベースを作成(ユーザ名とパスワードはデフォルト前提)<br />$ <a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a> -uroot -p -e 'CREATE DATABASE sample DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;'</li> <li>以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>開始<br /><a href="http://www.djangoproject.jp/doc/ja/1.0/intro/tutorial01.html">http://www.djangoproject.jp/doc/ja/1.0/intro/tutorial01.html</a></li> </ol> hwks NGUIでのレイヤー管理 hatenablog://entry/12921228815726825364 2014-06-25T19:38:43+09:00 2014-08-30T01:38:55+09:00 NGUI2.7のUIPanel下にGameObjectを追加してUIPanelとは別のLayerを設定しても、実行時に警告ログを出力しつつUIPanelのLayerで上書きされてしまいます You can't place widgets on a layer different than the UIPanel that manages them.If you want to move widgets to a different layer, parent them to a new panel instead. NGUIを使ってゲームっぽいものを作ろうとした時に、UIPanel下のレイヤー… <p>NGUI2.7のUIPanel下にGameObjectを追加してUIPanelとは別のLayerを設定しても、実行時に警告ログを出力しつつUIPanelのLayerで上書きされてしまいます</p> <blockquote> <p>You can't place widgets on a layer different than the UIPanel that manages them.<br />If you want to move widgets to a different layer, <span style="color: #cc00cc;">parent them to a new panel instead</span>.</p> </blockquote> <p> NGUIを使ってゲームっぽいものを作ろうとした時に、UIPanel下のレイヤーが全て統一されてしまうと少し不便です</p> <p> </p> <p><span style="text-decoration: underline;"><strong>レイヤー毎にUIPanelを作成する</strong></span></p> <p>警告ログで<span style="color: #cc00cc;">指示</span>されている通りに解決します</p> <ol> <li><span style="line-height: 1.5;"> Anchor下にUIPanelを追加する(NGUI &gt; Create a Panel)</span></li> <li>追加したUIPanelのLayerを設定する</li> <li>(追加したUIPanel下に必要なGameObjectを追加する)</li> <li>(追加したGameObjectのLayerは実行時に2.で設定したLayerで上書きされる)</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%A3%BF%F4">複数</a>のUIPanelを同時に写し撮るため、CameraのCulling MaskでそれぞれのUIPanelに設定したLayerを選択する</li> <li>UICameraのEvent Receiver Maskも5.と同様にLayerを選択する</li> </ol> <p> </p> <p><span style="text-decoration: underline;"><strong>NGUIの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>を改変してレイヤーを上書きさせない</strong></span></p> <p>お薦めできない<span style="color: #cc0000;">力技</span>ですので自己責任において</p> <ol> <li>UIwidget.csの342行目を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%E1%A5%F3%A5%C8%A5%A2%A5%A6%A5%C8">コメントアウト</a></li> <li> <blockquote> <p class="p1">public void CheckLayer ()</p> <p class="p2">{</p> <p class="p1">        if (mPanel != null &amp;&amp; mPanel.gameObject.layer != gameObject.layer)</p> <p class="p1">        {</p> <p class="p1">                Debug.LogWarning("You can't place widgets on a layer different than the UIPanel that manages them.\n" +</p> <p class="p1">                        "If you want to move widgets to a different layer, parent them to a new panel instead.", this);</p> <p class="p1"><span style="color: #ff2600;">//              gameObject.layer = mPanel.gameObject.layer;</span></p> <p class="p1">        }</p> <p class="p2">}</p> </blockquote> </li> </ol> hwks Inspectorでコンポーネントのenabledを設定できない hatenablog://entry/12921228815726006248 2014-06-13T02:27:47+09:00 2014-06-25T15:11:52+09:00 UnityのGameObjectにコンポーネントとして追加したスクリプトのenabledをInspector上から設定するためのチェックボックスが表示されないことがありまして 支障は無かったのですが個人的に気になったので調べてみたところ スクリプトにStartかUpdateのどちらも定義されていない場合に表示されないようです 空っぽのStartまたはUpdateを定義したところチェックボックスが表示されました (チェックボックスが表示されない状態でもスクリプトからenabledの設定は可能) 意図して表示していないのかどうかは分かりませんが 何故?とハマった時の参考になれば幸いです <p>UnityのGameObjectに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%A5%C8">コンポーネント</a>として追加した<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>のenabledをInspector上から設定するための<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%A7%A5%C3%A5%AF%A5%DC%A5%C3%A5%AF%A5%B9">チェックボックス</a>が表示されないことがありまして</p> <p><img class="hatena-fotolife" title="f:id:hwks:20140613021036p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20140613/20140613021036.png" alt="f:id:hwks:20140613021036p:plain" /></p> <p> </p> <p>支障は無かったのですが個人的に気になったので調べてみたところ</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>にStartかUpdateのどちらも定義されていない場合に表示されないようです</p> <p>空っぽのStartまたはUpdateを定義したところ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%A7%A5%C3%A5%AF%A5%DC%A5%C3%A5%AF%A5%B9">チェックボックス</a>が表示されました</p> <p>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%A7%A5%C3%A5%AF%A5%DC%A5%C3%A5%AF%A5%B9">チェックボックス</a>が表示されない状態でも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>からenabledの設定は可能)</p> <p><img class="hatena-fotolife" title="f:id:hwks:20140613021405p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hwks/20140613/20140613021405.png" alt="f:id:hwks:20140613021405p:plain" /></p> <p> </p> <p>意図して表示していないのかどうかは分かりませんが</p> <p>何故?とハマった時の参考になれば幸いです</p> hwks