Unityあれこれ

ローカルのUnityプロジェクトが最新にならない

チーム開発等でUnityのプロジェクトを最新にしても、ローカルのAssetが古くて挙動がおかしいことがあった。
以下の手順で解決。

  1. Unityを終了
  2. プロジェクト直下のLibraryディレクトリを丸ごと削除
  3. Unityを起動

Canvas以下に置いたTestTextというコンポーネントを探して、テキストを変える

int number = 0;
var canvas = GameObject.Find ("/Canvas");
foreach (Transform child in canvas.transform) {
    if (child.name == "TestText") {
        Text target = child.gameObject.GetComponent<Text> ();
        target.text = "hoge" + number.ToString ();
    }
    number++;
}

GameObjectの表示/非表示切り替え

  • SetActive() を使う
  • 非アクティブ化されたGameObjectを取得できるFindDeep() を使う
    • 第二引数にtrueを渡すと非アクティブなGameObjectも検索対象になる
bool isActive = false;

gameObject.FindDeep ("MyChunoText", isActive).SetActive (isActive);

Modelとテーブルを追加する

追加したいテーブル

CREATE TABLE `hchuno_items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` int(11) DEFAULT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `version` int(11) DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

手順

Active Recordを使ってModelを生成

$ rails generate model hchuno_items code:integer name:string version:integer

invoke active_record
create db/migrate/20150205000000_create_hchuno_items.rb
create app/models/assetbundle_master.rb
invoke rspec
create spec/models/hchuno_items_spec.rb
invoke factory_girl
create spec/factories/hchuno_items.rb

マイグレーションを実行してテーブルを追加

$ rake db:migrate

(in /Users/hchuno/projects)
== 20150205000010 CreateHchunoItems: migrating =========================

    • create_table(:hchuno_items)

-> 0.0399s
== 20150205000012 CreateHchunoItems: migrated (0.0400s) ================

コルーチン関連

処理内容

  1. ボタンを表示
  2. ボタンを押すと指定したSceneに遷移
  3. 裏で、指定したURLに接続

ソースコード

using UnityEngine;
using System.Collections;

public class Title : MonoBehaviour {
	void OnGUI () {
		if (GUI.Button(new Rect(Screen.width/2 -100 , 100, 200, 50), "GAME START"))
		{
			Application.LoadLevel("particles");
			StartCoroutine("LoadData");

		}
	}

	private IEnumerator LoadData() {
		string url = "http://localhost:3000";
		WWW hoge = new WWW(url);
		while (!hoge.isDone) {
			yield return null;
		}
	}
}

少しハマったところ

↑上記ソースコードの、

WWW hoge = new WWW(url);

の部分で当初、変数hogeの前の型宣言を書かずにビルドしたら、

hoge does not exist in the current context

と怒られた。

日本語配列キーボードなMacBook Proに行った設定

概要

職場で日本語配列キーボードのMacBook Pro(以下、MBP)が支給された。
US配列キーボードのものが欲しかったのだが、あまり贅沢は言えず。
とは言え、普段慣れ親しんでいるのはUS配列のキーボードなので、極力そちらに近づけたほうが良いということで、色々と試してみた。

各種設定

ThinkPadのUS配列USBキーボードを使用

MBPに接続して認識させた後、システム環境設定の「キーボード」にて少々キーバインドを変更する。
f:id:hchuno:20150109210105j:plain

メリット
  • ほぼUS配列キーボードのMBPと同じ挙動
  • トラックポインタが使える
デメリット
  • MBPの占有スペースが無駄
  • MBPのトラックパッドが使えない
  • 持ち運びにくい

キーバインディング変更ソフトを使用

  • Karabiner - OS X用のソフトウェア
    • 以前は「KeyRemap4MacBook」という名で知られていたソフト。OS X10.9から名前が変わった模様。
    • 言語に応じた細かい設定も可能になっており、「For Japanese」→「Change Keyboard Layout」とたどると以下の様な項目があった。「USE Japanese Kyeboard as US Keyboard」という項目もあったのだが、いまいち期待した挙動にならなかったため止めておいた。

f:id:hchuno:20150109210251j:plain

メリット
  • 場所を取らない
  • トラックパットが使える
  • 持ち運びしやすい
デメリット
  • ThinkPadキーボードと比べるとキー配列に違和感が残る
  • 表記と異なる挙動をするキーが存在する(普段の慣れに頼るしかない)
最終的な設定
  • かなりUS配列の挙動に近づいた!
    • 各キーの表記に釣られてしまうので、無刻印キーボードのつもりで慣れるしかない…

f:id:hchuno:20150112193925j:plain


結論

「腰を据えて使うときはThinkPadキーボード、持ち運ぶときはMBP単独」という使い分けができるようになっただけでもデカい。

rails console が動かなかった件

$ rails console
/home/vagrant/.rbenv/versions/2.1.5/lib/ruby/2.1.0/irb/completion.rb:9:in `require': cannot load such file -- readline (LoadError)

readlineが無い」ということなので、rb-readlineをインストール。

$ gem install rb-readline

Gemfileを開いて、

gem ‘rb-readline’

を追記。

その後、bundle installを実行。

$ bundle install

再度、rails console を実行したら無事に動いた。

Chrome拡張のSilverBirdでリストが取得できなかった件

状況

  • リストを表示しようとしたら、「"undefined"(Not Found) updating tweets 」というエラーが出て表示できなかった

f:id:hchuno:20141101130059p:plain

対処方法

~/Library/Application Support/Google/Chrome
//Macの場合のパス。Windowsだと異なるが、ファイルの中身等やること自体は変わらない

この下に

lists_timeline.js

というファイルがあるので、find等で探して編集。

_extendParams
…
…
params.slug = this.listIdParts[2];
// ↑変更箇所

となっている箇所を

_extendParams
…
…
params.slug = this.listIdParts[3];

に変更し、SilverBirdを再起動。

2015-01-09補足

上記の方法でSiverBirdを再起動すると破損扱いされて「修復」を選ばざるを得なくなり、そうすると上記の編集がリセットされる。
そこで「拡張機能のパッケージ化」を利用して「独自設定したSilverBirdをインストールする」という方法を採ることにした。

lists_timeline.jsを編集後、SilverBirdの再起動は行わず、以下の場所にある「manifest.json」を編集する。

/Users/hchuno/ライブラリ/Application Support/Google/Chrome/Default/Extensions/ExtensionのID/バージョン名/

  1. 「key」「update_url」の行を削除して保存する。
  2. Chromeの「拡張機能」の画面を開く
  3. ディベロッパーモード」をチェックする
  4. 拡張機能のパッケージ化」ボタンを押す
  5. 拡張機能のルートディレクトリ」のところに、上記のバージョン名ディレクトリまでのパスを入れる
  6. 秘密鍵ファイル」は空欄にしておく
  7. 「ExtensionのID」ディレクトリ直下に「バージョン名.crx」というファイルが生成されているので、これを拡張機能画面にドラッグアンドドロップする
    • ディレクトリをFinderで表示させる場合は、Finderのメニューから、移動→フォルダへ移動、と選択して、上記のバージョン名までのパスを入力する
  8. オリジナルのSilverBirdの「有効にする」チェックを外す

PHPUnitのアップグレードやアンインストール等

sudo vim /etc/php.ini
以下を追記
include_path = ".:/php/includes:/usr/lib/php/pear"

sudo pear upgrade PEAR
pear config-set auto_discover 1
sudo pear install pear.phpunit.de/PHPUnit-3.7.32



phpunit -v
PHPUnit 4.0.11 by Sebastian Bergmann.
アンインストール
sudo pear uninstall pear.phpunit.de/PHPUnit