画面サイズの固定(アスペクト比の固定)

端末間での画面サイズを簡単に吸収できるコードを見つけたのでメモ。
Awake()内などに下記を記述。

// アスペクト比の固定処理
var camera : Camera = GameObject.Find(“Main Camera”).GetComponent(Camera);

var baseAspect : float = 960.0f / 640.0f;// 固定させたい値
var nowAspect : float = (parseFloat(Screen.height) / parseFloat(Screen.width));
var changeAspect : float = 0.0;

if(baseAspect > nowAspect){
changeAspect = nowAspect / baseAspect;
camera.rect = Rect((1.0f – changeAspect) * 0.5f,0.0f,changeAspect,1.0f);
}else{
changeAspect = baseAspect / nowAspect;
camera.rect = Rect(0.0f,(1.0f – changeAspect) * 0.5f,1.0f,changeAspect);
}

Unityのアンドロイド用マニフェストの一部上書きや変更。

===========================
http://nantara.jp/blog/?p=154
===========================
※上記に記載されているAndroidのプロジェクト出力方法の設定をすると、
MyUnityProject>Temp>StagingAreaフォルダ
にAndroidのプロジェクトが出力されるようになります。この中のマニフェストファイルをコピーします。

コピーしてきたマニフェストファイルに必要な記述をして編集&保存します。

Assets>Plugins>Androidフォルダ(無ければ作る、名前は左記のとうり)に編集したマニフェストファイルを配置してください。

これで次回ビルド時からこのマニフェストファイルの内容が適用されます。

UnityのAndroidプロジェクトの出力

Unity上で、Androidのプロジェクトを出力できるようにする設定。

(1)[Edit]→[Preferences]で設定ウィンドウを表示。

(2)External Toolsのタブをクリック。

(3)Android SDK Location[c:\adt-buldlexxxxxxx/sdk(←こんな感じでADTのsdkフォルダを選択)]

(4)Android向けのプラットフォームで、実行ファイル(apk)を作成すると、MyUnityProject>Temp>StagingAreaフォルダが出来ている。これがプロジェクト一式となる。

MiniJSON.csの使い方

MiniJSON.csファイルを取得してきましょう。
※以下からコピペかダウンロード(2014年5月はあった!)
https://gist.github.com/darktable/1411710

Assetsフォルダ>Pluginsフォルダ(無ければ作る、このファイル名である必要がある。)内にMiniJSON.csファイルを配置する。

利用したいJavaScriptのコードの先頭あたりに、
import System.Collections.Generic;// パースする時などに利用する。
import MiniJSON;
とインポートしておく。

var dict = Json.Deserialize(json文字列) as Dictionary.<String,System.Object>;
var i : int = dict["キー"];// 数値と分かっているものはこんな具合。
var str : String = dict["キー"] as String;// テキストの場合はこんな具合。
var dict2 = dict["キー"] as Dictionary.<String,System.Object>;// “キー”:{xxx}の要素をDictionary化。
var c : int = dict["キー"] as List.<System.Object>).Count;// ”キー”:[配列]の場合の数を調べる。
var dict3= (dict["キー"] as List.<System.Object>)[0] as Dictionary.<String,System.Object>;// 配列の要素内の”キー”:{xxx}の要素をDictionary化。

ADT Plugin for Eclipseの更新

ADT Plugin for Eclipseを更新しないとADTがまったく使えなくなるときがある。
※Eclipse起動後にエラーメッセージが表示される。

[Window]→[Preferences]をクリックすると表示されるウィンドウ内に
(×)This Android SDK requires Android Developer Toolkit version x.x.x or above. Current version is x.x.x.vxxxxxxxxxxxxxxxxxxxxx. Please update ADT to the latest version.

などとエラー表示される場合はADT Plugin for Eclipseの更新が必要。

(1)[nstall New Software...]をクリック。

(2)Work with:[                  ]▽の項目を▽をクリックして
「Android Developer Toops Update Site – http://dl-ssl.google.com/android/eclipse/
をチョイスする。

(3)Developer Toolsにチェックして、[Next]をクリック。Review Licensesにacceptして[Finish]をクリック。

(4)インストール開始、途中確認のダイアログが出るが[ok]をクリック。Eclipseが再起動されます。[Window]→[Preferences]をみて、エラー文が消えていれば完了。

rigidbody同士(そうじゃなくてもいいかも)で、当たり判定を無視する。

あるrigidbodyコンポーネントが付いたゲームオブジェクトA,ゲームオブジェクトBが存在するとした場合、
ゲームオブジェクトAとBの衝突を無視するためのコードは、

Physics.IgnoreCollision(gameObjectA.collider,gameObjectB.collider);

Physics.IgnoreCollision(gameObjectA.rigidbody.collider,gameObjectB.rigidbody.collider);// rigidbodyの場合はこちらで行うと良いかもしれない。

とします。配置済みのオブジェクトに対して設定する場合は、Startメソッドなどに記述、コード上でオブジェクトを生成するなどしている場合は生成後に1回コールしてあげるとよさそう。

xcode(4.3.2)でのプロジェクト名とスキーム名の変更方法

xcode(4.3.2)でのプロジェクト名とスキーム名の変更方法を記載しておきます。

1.Project Navigatorでトップ階層(プロジェクト名が書いてある)を選択状態にする。
※Project Navigatorは画面左側にあるエリア

2.File InspectorのProject Nameを任意の名称に変更する。
※File Inspectorは画面右側にあるエリア
(ウィンドウが出てきて変更の確認画面が出る。)

3.左上のRun Stopボタンの横にある、[スキーム名>IPhone 5.1 Simulator]のスキーム名をクリックしてManage Scheme…を選択します。

4.現在のスキーム名が表示されている部分をゆっくりクリックして任意の名前に変更してokボタンをクリックします。

 

iPhone実機でのフレームレート

iPhone上(iPhone4)で実機テストをするとAndroidと同じプロパティ上でのデフォルトのフレームレートの速度が出ない。

そのためメイン処理に

function Awake(){
Application.targetFrameRate = 60.0f;
}

などと明示的に記述しておくとその速度で動く。
※もちろん描画、処理内容によってはパフォーマンスの低下はある。
※この設定はUnity上でのデバッグ再生では適用されない。

 

unity終了の手順

たとえば「android端末であった場合にリターンキーを押した時に終了させたい」場合は、スクリプトのUpdate内に

if(Application.platform == RuntimePlatform.Android){
  if(Input.GetKey(KeyCode.Escape)){
    input = INPUT_RETURN;
  }
}

などとしてinputに独自のキーコードを設定する。

メイン処理用のゲームオブジェクトでinputの値を確認して、INPUT_RETURNだった場合には

Application.Quit();
return;

を記述して終了させる。

 

複数同時タッチ

if(Input.GetTouch(0).phase == TouchPhase.Began){};// タッチ初め
if(Input.GetTouch(0).phase == TouchPhase.Ended){};// タッチ終わり
if(Input.GetTouch(0).phase == TouchPhase.Moved){};// タッチしている

上記をUpdate内に記述して確認する。

タッチ座標は

Input.GetTouch(0).position.x
Input.GetTouch(0).position.y

で取得できます。

複数取得する場合は、0を1にして複数確認すればok。

※ただし上記はpc上だと確認できないのでマウス操作でも動くように記述を追加しておいた方が良い。
※GetMouseButtonDown、GetMouseButtonUpなど