Nanashi-softプログラマ専用Unityでゲーム開発


◇Unityでゲーム開発 -TIPS編-

ページに分離するほどでもない話を色々と書いておきます
そのうちいくつかの内容をまとめてページ作るかも

●Consoleの内容が見辛い。検索とかしたい

右上の Open Editor Logをクリックしてエディタを起動すれば良い

●OSを判別する方法

スクリプトを記述していると,OS毎に挙動を変えたい場合が発生します
キーの一般名称に違いがあったりもしますしね

SystemInfo.operatingSystemで OSの詳細がわかります
その文字列中から,Containsで特徴的な部分を検索してみます

○OS判別スクリプト
if(SystemInfo.operatingSystem.Contains("Windows")){
	if(SystemInfo.operatingSystem.Contains("64bit")){
		Debug.Log("Win 64bit");
	}else{
		Debug.Log("Win 32bit");
	}
} else if(SystemInfo.operatingSystem.Contains("Mac")){
	Debug.Log("Mac");
} else if(SystemInfo.operatingSystem.Contains("Android")){
	Debug.Log("Android");
} else if(SystemInfo.operatingSystem.Contains("iPhone")){
	Debug.Log("iOS");
}
これ以外の環境はライセンスが無いので調査不能です
ちなみに,Mac版は Unity3.5から Intel CPUのみサポートになりましたので区別していません

●Androidで戻るキーで終了したい

Androidアプリでの一般常識は,
・戻るキーでアプリ終了
・ホームキーでアプリサスペンド
です

ですが,Unityアプリは戻るキーを押してもゲームが終了しません
これは,パソコンでウィンドウを閉じるボタンを押してもソフトが終了しない,ようなもので,とても不便です

//Androidで戻るキーでアプリを終了させる
if(Application.platform == RuntimePlatform.Android && Input.GetKey(KeyCode.Escape)){
	Application.Quit();
}
尚,機種判定を入れないと,パソコンでESCキーを押しても終了になります
フルスクリーン時にソフトを終了させる手段として用いられる事もあるので,それもアリかも知れません

●Start()やUpdate()メソッドが実行されない

Hierarchyに置いたスクリプトのものだけが実行されます
Emptyオブジェクトでもいいので何か置いて,Inspectorにスクリプトをドラッグ&ドロップしましょう

●Hirarchyの中身が Main Cameraだけになった

プロジェクトをいくつか作成して,切り替えているとそういう風になったりします
そう言うときは,慌てず(余計な所を触らず)メニューのFile→Open Sceneでシーンを開き直しましょう

●プロジェクトのバックアップを取りたい

Terrainなど,ちょっと触っただけで勝手に保存されてしまって困る事が多々あります
現状を保管して置きたい時は,エクスプローラーなどで,プロジェクトフォルダを丸ごとコピーして置きましょう
私は何かする前に,とりあえずコピー&貼り付けでナンバリング付きのフォルダーを作ってから作業しています

●MSAA(アンチエイリアシング)調整方法

メニューの Edit→Project Settings→Qualityを選択
Inspectorに,Graphics qualityリストと同じ項目が並んでいます
Anti Aliasing項目で,Disabled,2x Multi Sampling,4x Multi Sampling,8x Multi Samplingの中から選択ができます(Unity3.4の場合)

当たり前ですが,効果を上げるにつれて処理が重くなります
経験上,MSAAはかけないか,かけるなら 4xぐらいで無ければあまり意味は無いです

・Unity3.4では,None,2x,4x,8xのうちからどれかを選択できます
 Unity3.3から変更になったので,今後も変更になる可能性があります
・グラフィックカードが機能を持っていなければ反映されません

●変更したスクリプトがうまく反映されない

スクリプトを保存した時に,Unity本体を最小化していると連携されないようです

●スクリプトエディタを元に戻す

・Unity3.5の場合
Unity3.5にバージョンアップすると,UniSciTEが削除されます
インストール前に C:\Program Files (x86)\Unity\Editor\Data\Tools\UniSciTEフォルダを別の場所にコピーして下さい

インストール後に気が付いた場合は,Unity3.4をインストールし直して,UniSciTEフォルダをコピー後,Unity3.5をインストールし直せば良い です
他のパソコンにインストールしても良いでしょう

設定場所が,今回のバージョンアップで少し変わっています
メニューの Edit→Preferences...→External Toolsタブ
External Editorのところが,前に設定していると既に UniSciTEになっているのですが,それは無くなっているので無効ですorz
一旦 MonoDevelopにすると,UniSciTE項目が消えます
Browseを選択して,さっきコピーした UniSciTEフォルダを選択

これで今まで同じようにスクリプトを書くことができます


・Unity3.4の場合
Unity3.4にバージョンアップすると,従来の軽いエディタじゃ無くなります
正直言って,JavaScriptで記述する限りは従来のエディタの方が使い勝手が良いです

Unityメニューの Edit→Preferenses...→Generalタブ→External Script Editor→Browse...→C:\Program Files (x86)\Unity\Editor\Data\Tools\UniSciTE\UniSciTE.exeを開く
これで今まで通りのエディタになります

●デバッグ表示

Debug.Log("『文字列』");

出力はコンソールに出ます
メニュー→Window→Consoleでウィンドウを出せます

●色指定

Colorクラスを使用します

コンストラクタを使うと簡単です
Color(『R』,『G』,『B』);
α指定も可能です
Color(『R』,『G』,『B』,『α』);

3Dツールなので,普通に0.0~1.0で指定です
赤は Color(1.0, 0.0, 0.0);
完全透過は Color(0.0, 0.0, 0.0, 0.0);
と書いておけば,後はわかりますよね?

クラスなので,もっと多彩な機能があります

●最初からある Main Cameraが findできない

なぜかスペース無しの『MainCamera』で探すと見つかります(謎

var maincamera:GameObject = GameObject.FindWithTag("MainCamera");
こういう感じで

●1ユニットのサイズ

1unit = 1mとして扱われるらしい

●String文字列に特殊記号を入れたい

・改行
リターンとラインフィールドは別扱いです
var s:String="\r\n";    //リターン&ラインフィールド(一般的なWindows)
var s:String="\n";    //ラインフィールドのみ(MacOSXやLinux)

・タブ
var s:String="\t";

・半角の " (ダブルクォーテーション)
var s:String="\"";

・\自身
var s:String="\\";

・半角バックスラッシュと半角エン記号
UniSciTEエディターで¥キーを押すと,半角\で表示されます
世界的に見ればそれが正しく,日本のパソコンでは半角¥と誤って表示されています
歴史的な背景があるのですが,Unicodeでは明確に区別されていますので,ここではUnicode指定で正しく表示されない場合は正しくないものとします

Unityに正しい表示のUnicodeフォントをセットします
正しいと言うのは,半角エン「¥」と半角バックスラッシュ「\」これが,きちんと表示されるフォントです
どちらも¥の場合は,このページはUTF-8と宣言していますので,正しくない表示をするフォントと言う事です

UniSciTEエディターの文字コードをUTF-8にします
メニューのFile→Encoding→UTF-8 with BOM (※既に英字を書いていたとしても,UTF-8は英字を壊さないように定義されてあるので変えても大丈夫です)
var s:String="\\";    //半角バックスラッシュ
var s:String="¥";    //半角エン

●ビルド結果を見たい

ビルド後に,ログファイルを開く(※)と,ビルド処理の実行結果が出力されています
※開き方は,メニューのWindow→Consoleを開いて,右上の三本線をクリックして,Open Editor Log

●ビルド時にシェーダーを必ず含める方法

メニューのEdit→Project Settings→Graphicsを開く
そこに表示されているシェーダーは,ビルド時に無条件でパッケージ化されます

Sizeの数を増やすと,Element欄が増えますので,そこにシェーダーをセットする

・もう1つの解決方法
要するに,そのシェーダーを使用したマテリアルがあれば確実にビルド時に含まれるので,
ProjectのResourcesフォルダの下に,Create→Materialでマテリアルを追加
その空マテリアルに,必要なシェーダーをセットする

という方法でも解決できます



TOPプログラマ専用Unityでゲーム開発

チアガール☆花穂ネコミトリ 詰めロイヤルマリッジ+メイナの実験場~きょとんとした,ぺたんこ座り娘+~