2015年1月29日木曜日

Macのターミナルからapkをインストールする

Macからスマホやエミュレーターへapkファイルをインストールするにはターミナルを使用します。
ターミナルappはアプリケーションフォルダのユーティリティーにあります。ターミナルはMacのコンソール画面のことです。Windowsのコマンドプロンプトと同じように使用します。

以下は手順

1.adb実行ファイルのあるディレクトリへ移動します
cd /Users/..../platfrom tools(プラットフォームツールスのフォルダをドラックアンドドロップでおk)
2.スマホを接続もしくはエミュレーターを起動する
3.apkファイルをインストール

./adb install /Users/.../XXX.apk
4.成功したら以下のようなログが表示されます。
2072 KB/s (3784683 bytes in 1.783s)
pkg: /data/local/tmp/XXX.apk

Success

失敗した場合

Failure [INSTALL_FAILED_OLDER_SDK]
SDKのバージョンが正しくないかも?
error: more than one device and emulator

- waiting for device -
スマホかエミュレーターが2台以上接続されている?
Failure [INSTALL_FAILED_CONTAINER_ERROR]
エミュレーターのインストール先のロケーションがautoになっていない?

2015年1月13日火曜日

C#で型を引数として渡すサンプル

C#で型引数を使用した配列インスタンス作成サンプルです。
    private T[] SyokikaKurassu<T>(int kazuwhere T : new(){
        T[] tmp = new T[kazu];
        for (int i=0i<kazui++) {
            tmp[i]=new T();
        }
        return tmp;
    }

使い方は

クラス = SyokikaKurassu<クラス> (配列の数);
型引数は言語とそのバージョンによって使い方が変わってくることがあります。
便利なので忘れないようにメモ。。

2015年1月12日月曜日

UnityのuGUIを画面サイズに合わせる方法

Unity4.6から使用できるようになったuGUI を画面解像度に合わせる方法です。
以下の例ではボタンとフォントサイズが自動で調整されます。
uGUIの階層はキャンパス->パネル->ボタン->テキストになります。
画面サイズ
キャンパスはCanvas ScalerをScale With Screen Sizeにし、Screen Match ModeをExpand に変更する
キャンパスの設定
パネルを追加しアンカーを中央にする
テキストはBest matchにチェックを入れる
以上で解像度が異なるスマホでもGUIを同じように見せることができます。
Rect transformを使えばその他のGUIにも応用できそうです。

2014年12月30日火曜日

動画サイトのError loading skin:Crossdomain loading denied

動画サイトの動画を視聴していたところプレイヤーに"Error loading skin:Crossdomain loading denied"と表示されて動画が見れなくなっていました。
数日前までは普通に利用できていたのですが、とりあえず広告を消すプラグインを停止したら動画が見られるようになりました。自分も作ったアプリには広告を削除すると機能しなくなるプログラムを入れているので広告ブロック対策の否定はできません。それとクロスドメイン対策でもあります。

解決方法

広告をブロックするプラグインを停止する。
もしくは動画の配信元サイトで視聴すること。※動画ファイルだけ他のサイトから読み込む仕組みだと同様に対策されるため


2014年12月28日日曜日

unityの二種類の衝突イベントの違いと注意点

Unityには二種類の衝突イベントがあります。
  • OnCollision (衝突対象とすりぬけない
  • OnTrigger (衝突対象がすりぬける

どちらも衝突発生と衝突中、衝突終了の3種類のイベントを拾えます。

二つの衝突イベントの違い

OnCollision衝突イベントには衝突オブジェクトのどちらかにリジットボディが必要。
コライダーには実体があり、他のオブジェクトにぶつかります

void OnCollisionEnter(Collision other) {

OnTrigger衝突イベントは動きのあるコライダー単位で発生する。※位置をワープさせてぶつけても衝突にならない。
コライダーには実体がなく、他のオブジェクトにはぶつからない。当たり判定のみ存在する。
void OnTriggerEnter(Collider other) {

注意点

二つのイベントはリジットボディ単位かコライダー単位かで発生数が変わってしまう。
当たり判定をワープさせると反応しない場合があること。

2014年12月23日火曜日

無効化できないボタン

 Android3X以降のAndroidはディスプレイの下部に「バック、ホーム、タスク」の三つのボタンがあります。
そのうち「ホーム、タスク」はアプリから無効化することはできません。ボタンの誤動作を防ぐにはGUIを工夫するしかないようです。

2014年12月22日月曜日

Unityオブジェクトの子要素を取得する

プレファブはsensya>housin>anaの入れ子の親子関係になっています。
pXXはゲームオブジェクトです。

子要素の取得

        p1 = getJittai (presen);//一つのプレファブから二つの戦車の実態を作成
        p2 = getJittai (presen);
        //p1a = GameObject.Find ("Ana");これだとどちらの戦車の砲身だかわからない
        p1a = p1.transform.FindChild ("Housin").transform.FindChild("Ana").gameObject;


    }
//プレファブから実体を作成して画面に配置
    public GameObject getJittai(GameObject prefab){
        GameObject gameObj = Instantiate (prefabas GameObject;
        Transform tran = gameObj.transform;
        tran.position = this.transform.position;
        return gameObj;
    }

親要素の取得は以下です。
gameObject.transform.parent.gameObject
親は一つしかないので名前を指定する必要はありません。