冷奴の開発メモ

UnityとかC#とかプログラミングのことをメモしていく場所

Unity

ニフティクラウドmobile backendを使ってみた

アプリで作成したデータ(Serializableなクラス)をユーザ間で共有する仕組みを探していたところ、ニフティクラウドmobile backend(NCMB)が想像以上に簡単だったためメモ。公式ドキュメント。導入方法やサンプルなどが非常に充実している。 ドキュメント : 開…

エディタ用テキストダイアログ

ソース using UnityEngine; using UnityEditor; namespace Hiyayakko { public sealed class EditorTextDialog : EditorWindow { private string label = ""; private string value = ""; private System.Action<string> onOk = null; private System.Action onCance</string>…

IntをEnumとして表示する

ソース using UnityEngine; using System.Collections; using System.Collections.Generic; using System; using System.Diagnostics; #if UNITY_EDITOR using UnityEditor; #endif namespace Hiyayakko { [AttributeUsage(AttributeTargets.Field), Conditi…

Projects上の右クリックメニュー

Projects上での右クリックメニューはメニューバーのAssets以下と同じなので、 [MenuItem("Assets/~")]で追加できる。

IDによるAnimatorの操作

Animatorのパラメータの設定やステートの切り替えには文字列のほかに、Animator.StringToHash()で取得したIDを使用できる。 文字列の場合と比べコストが低いので、Updateなどで頻繁に呼び出すときはIDをキャッシュして使用するべき。

Debug.Break()

Debug.Break()でエディタが一時停止する。

PrefabのApply,Revert

Scene上に設置されたプレハブのInspector上部に表示される Applyボタンを押すと変更が元のプレハブに反映される。 Revertボタンを押すと元のプレハブと同じ状態に戻る。

タブの表示内容のロック

InspectorやProjectの右上にある錠をクリックすると、表示中の内容でロックされる。 Inspectorを複数開いて見比べたり、Projectでアセットの整理をするときに便利。

オブジェクトにカメラを移動

Hierarchyでオブジェクトをダブルクリックすると、 Sceneビューのカメラがそのオブジェクトに移動する。

Tag,Layerの階層化

Tag名やLayer名は/(スラッシュ)で区切ると階層構造にできる。

Inspectorに数式

Inspectorの数値フィールドには数式を入力できる。

Debug.Log()にリッチテキスト

<color=red>や<b>などのリッチテキストは、 Debug.Log()にも使うことができる。</b></color=red>

UnityEngine.Objectのnull比較

UnityEngine.ObjectはEqualsをオーバーライドしている。 nullと比較する際にDestroyされたかどうかも確認おり、 Destroy済みならnullでなくてもtrueになる。 この比較処理はisを2回使っているなど結構重い。 Object.ReferenceEquals(obj, null)なら普通のnul…

検索結果の保存

Projectの右上の星をクリックすると、検索結果を保存できる。

ドラッグで数値操作

インスペクタの数値入力は左のラベル上で左右にドラッグして増減できる。

イベント関数のコルーチン化

StartやAwakeなどイベント関数は一部を除いて、 返り値をIenumeratorにするとコルーチンとして呼ばれる。

GetComponentをキャッシュ

GameObjectのGetComponentやtransformは処理が重いので Updateの中で参照する場合はStartやAwakeでメンバ変数にキャッシュしておくべき。

ギズモを表示しない

Scene上に表示されるギズモ(Colliderの緑の判定範囲や、Cameraの表示範囲など)は、 インスペクタで対応するコンポーネントを折り畳むと表示されなくなる。

コンポーネントの検索

検索に「t:コンポーネント名」と入力すると、 指定したコンポーネントがついているオブジェクトが表示される。

Hierarchyでダブルクリック

Hierarchyでオブジェクトをダブルクリックすると、 Sceneがそのオブジェクトのところに移動する。

子オブジェクトの展開

Hierarchyでオブジェクトを選択した状態で、 Command(Control)+Alt+右キーを押すと、 子要素の階層が全て展開して表示される。 Command(Control)+Alt+左キーを押すと、 全て畳まれる。

Debug.Log()の第2引数

Debug.Log()の第2引数にGameObjectを渡すと、 ログをクリックしたときにそのGameObjectが選択される。

FixedUpdate()内のTime.deltaTime

Time.deltaTimeはFixedUpdate()内で呼ばれると、 Time.fixedDeltaTimeの値になる

スクリプトテンプレートの追加

Unityのインストールフォルダ以下(Macはパッケージ内)にある /Resources/ScriptTemplates/にファイルを置くと スクリプトテンプレートを追加できる。

タブのレイアウトを保存

並べ替えたタブの状態は、右上のLayoutボタンから保存・切り替えできる。

タブ最大化

Shift+Spaceで、フォーカスがあっているタブが最大化。