Unityな日々(Unity Geek)

Unityで可視化アプリを開発するための試行錯誤の覚書

C#でcoroutineを使う

javascriptでcoroutineを使う際は、 処理1 yield WaitForSeconds(2); 処理2 と、yiledをはさむだけでよい。C#の場合は、StartCoroutine/IENumearatorの組になるようだ。 public void endRecording(){ if(isFile){ titleScreen.endRecording(); // StartCor…

ポリゴン・メッシュを裏返す

参考:ReverseNormals - Unify Community Wikiモデルのポリゴン・メッシュの一部が裏返っている場合の修正。下の例は、水平面で上向きに揃える。 // ReverseMesh (Flip Mesh) // First Version 2015/06/02 by A.Y.@XOOMS // Last Update 2015/06/02 by A.Y.@…

Materialの色を変える

Materialの色は、(renderer.)material.SetColor("_Color", Color)で変更する。下の例は、materialをPublic変数として受け取り、指定したOn/Off時間で色を変えるもの using UnityEngine; using System.Collections; public class FlashingLight : MonoBehavio…

InputManagerの設定を再利用する

Unity - Inputを参考に。XBOX360用コントローラーはのアサインは、XBOX360コントローラを使う - Unityな日々(Unity Geek)に書いた。InputManagerの設定は、プロジェクトフォルダ-ProjectSettings-InputManager.assetファイルにある。このファイルをコピー…

日付と時間

日付と時間の取得は、DateTimeクラスを使う。DateTime Structure (System) DateTimeは.NETクラスのため、Using System; (jsは、import System;)が必要。 using System; public class TestTime : MonoBehaviour { void Start () { DateTime thisDay = DateTi…

シーンを再スタートする

まっさらの状態から始めたい場合は、Application.LoadLeveo(0)を使う。 たとえば、ESCキーでリスタートしたい場合 if (Input.GetKeyDown(KeyCode.Escape)){ Application.LoadLevel(0); }

Public変数だがInspectorから見えないようにする

パブリック変数として他のクラスから参照したいが、Inspectorでは変更できない(=Private変数と同様に見えない)ようにしたい場合は、[HideInInspector]属性を付加する。 [HideInInspector] public float invisiblePublicVar;

特定のタグ名のGameObjectをすべて取得する

GameObject.FindGameObjectsWithTag()を使えば、同じタグ名のGameObjectを一挙に取得できる。 public GameObject[] cars; void Awake () { if (cars.Length==0) cars=GameObject.FindGameObjectsWithTag("Car"); foreach (GameObject car in cars) { //Awake…

外部データの読み込みTips

実行時に外部ファイルからデータを読み込みたい場合のTips実行環境がUnityEditor(=ローカル)か独立したアプリケーション(=オンライン)かの区別は、Application.isEditorで行う。 ローカル実行の場合は、ファイルURLの先頭に"file://"をつける。 if (Ap…

AssetStoreから購入したPackageの在り処

AssetStoreでAssetを購入する際、ダウンロードボタンをクリックしても保存先の指定はなく、デフォルトの保存場所に保存されてしまう。 Assetの実態はどこにあるのかと調べたところ、Asset Storeからダウンロードしたファイルの保存場所 - 強火で進めに書かれ…

ローカルファイルに書き込む

ローカルファイルに書き込む場合は、System.IOのFileクラスを使う。基本的な手順は、 File.CreateText(filepath) で、ファイルを作成し、 WriteLine(text) で、一行ずつ書き込むと言うことになる。最後にClose()でIOを閉じることも忘れずに。 using UnityEng…

GUIのレイアウトを設定する

画面上に情報を表示するには、GUIクラスを使う。が、複数の情報を表示する場合はレイアウトも含めて一括設定できる、GUILayoutクラスが便利。各GUI要素を、GUILayout.BeginArea()~GUILayout.EndArea()で挟んで記述する。 void OnGUI(){ GUILayout.BeginArea(…

GUIにフォントを設定する

GUIの見栄えは、GUISkinで設定する。Projectビューで、Create-GUISkin フォントをプロジェクトに読み込む。 Windowsの場合、コントロールパネルーフォントをクリック。該当フォントをProjectビューにドラッグ&ドロップ Projectビューに読み込まえれたフォ…

Unityのバージョンで処理を変える

Unity Script Reference – Overview: Script compilation (Advanced) 特定のバージョンに対してのみ処理を行うことができる。例えば、Ver. p.q.r だけの処理は、 #if Use Unity_p_q_r #endif とする。p.q.x(xは任意)と、マイナーバージョンは関係なく適用…

特別なフォルダー名とコンパイルの順番

参考;About these special folders in unity3d ! Assets Editor Resources Plugins and so on ProjectビューはUnityプロジェクトのAssetフォルダの中身を表示している。ここには、ユーザーが任意のフォルダーを作成して各Assetを管理できるが、デフォルトで…

LightProbeを設定する

ライトプローブ(Light Probe)とは空間内にあるライトの情報を保存(ベイク)しておくテクニック。Lightmapは静的なオブジェクトには有効だが、動的なオブジェクトだと不自然さが生じる。Light ProbeはLight Mapほどの精度はないが、動的なオブジェクトも低…

C#の配列

UnityのライブラリやサンプルスクリプトはC#で書かれたものが多いので、C#の世界も理解しなければならない。今まではActionscript/javascript系を中心に開発してきたので、コードを眺めながら「??」となる点もいくつかあった。その覚書のひとつ。1)一般…

javascriptからC#のスクリプトを呼ぶ

まず、javascriptからjavascriptを呼ぶ場合、ひとつのGameObjectにそれぞれのjavascriptファイルをアタッチしてやる。たとえば、呼び出し側 #pragma strict var test:TestJS; test = GetComponent("TestJS"); function Start () { print(test.getNum()); }呼…

VisualStudio Expressをインストールする

KINECT導入にあたっては、やはりSDKのサンプルファイルをを参考にしたくなる。これらはC++,C#またはVBで書かれているので、少なくともいずれかの開発環境が必要。C++はとっつきにくいし、VBはサンプルが少ないので、消去法的にC#を導入する。VISUAL C# EXPRE…

KINECT SDKを使う その1・環境設定編

参考:Microsoft Kinect - Microsoft SDK - Unity3DUnityでKINECTを使う。方法はいくつかあるが、正攻法でMicrosoftのSDKを使ってみる。 注)以下はすべてWindows7以降の環境で行うこと。Macは非対応。 1.KINECT SDKをインストールする Develop for Kinect…

カスタムpackageを作る

汎用的なアセットを再利用するには、packageを使う。プロジェクトウィンドウで、package化したいアセットを選択する Assets-Export Package... を選択 Exporting Packagesのウィンドウが開かれる。「Export」をクリック。 ”Include dependencies"をチェック…

スクリプトを管理する

現在のプロジェクトにあるスクリプトファイルのリストは、Component-Scripts で見ることができる。 しかし、スクリプトの数が増えてくると長いリストになって不便。そこで、スクリプトをカテゴリー分け(および呼び出し名を設定)する方法が、@script AddCom…

変数の命名規則

Unityの変数の命名規則は次が標準。 種類 規則 例 一般の変数 ローワーキャメル deltaTime キーワード 小文字 audio, transform.position 列挙型 大文字 UPPERCASE 関数 アッパーキャメル CountTime クラス アッパーキャメル EnemyBoss

スカイボックスとテライン、フォグを使う

1)テラインを作るTerrain Assetsのパッケージをインポートする。 すべてチェックの状態で"Import" プロジェクトビューに"New Terrain"ができる。これをヒエラルキービューにドラッグ シーンにテラインができる。テラインの調整はインスペクターウィンドウ…

ガーベッジコレクションを最適化する

参考:Optimizing with Unity iPhone, the first three things I’ll do… | Cratesmith Gameworks

TagとLayer

gameObjectにはTagとLayerを設定できる。 Tagは、主にGameObjectを特定する(名前の代わり)に使用する。 Layerは、主にRendering設定のグループ分けに使う。例えば、あるカメラで見える/見えない、あるライトで照らす/照らさない、等)次のように設定する1)…

MonoBehaviourを理解する

参考 Unity Script Reference – MonoBehaviour Unityのスクリプトはすべて、MonoBehaviourクラスの子クラスでなければならない。 javascriptの場合は明示的に指定しなくてもMonoBehaviourの子クラスになる。例えば、testScript.jsと言うスクリプトファイルを…

#pragmaを使う

#pragmaとは、コンパイラ固有の指定を行う手段として ISO/JIS/ANSI 規格で定められているもの。#pragma 文の構文はコンパイラによって異なる。Unityの場合、次の3つがある。 pragma strict - 動的型付けを不可にする pragma implicit - 型の暗黙宣言を可能…

高速化:キャッシュを使う

コンポーネントを処理するには、そのコンポーネントを探す時間がかかる。このため、何度も使うコンポーネントはキャッシュしておくとパフォーマンスが上がる。 例えば、次のようなスクリプトは、 function Update () { transform.Translate(0, 0, 5); ..... …

高速化:静的型付け

高速化の基本は、静的型付け。多くの場合は、Unityが自動的に型を決めてくれる。例えば、 var foo = 5;とすれば、fooはInteger型になる。もしfooをfloat型として扱いたい場合は、期待した計算ができない。 var sum2 = 0;// 自動的にInteger型になる sum2 += …