Unity C# 小技集

適宜追加。

  • int型変数をstring型に変換するToString()
    string mesg = "hogehogeMessage";
    int beastNum = 666;
		
    mesg += beastNum.ToString();
    Debug.Log(mesg);
  • OnCollision*系列とOnTrigger*系列の違い

OnCollisionEnter(Collision)/Exit/StayとOnTriggerEnter(Collider)/Exit/Stayの違い。
Collision→衝突する2オブジェクトの両方がColliderとRigidBodyを持っている必要。
Trigger→オブジェクトのColliderのisTriggerがTrueであることが必要。
参考:http://unitytsukauyo.blogspot.com/2012/07/oncollisionhogehogeontriggerhogehoge.html

  • GUIのLabelを中央揃えにする
    public GUIStyle gStyle;
    :
    :
    gStyle.normal.textColor = Color.white; // GUIStyleStateを使う方法もある.
    gStyle.alignment = TextAnchor.MiddleCenter;
    :
    :
    GUILayout.Label("ShowMessage", gStyle);
  • GameObjectのアクティブ/非アクティブを切り替える
    dbgGUI = GameObject.Find("DebugGUI"); // 予め対象ゲームオブジェクトを取得しておく.
    :
    :
    if(Input.GetKeyDown(KeyCode.Escape))
    {
        dbgGUI.SetActive(!dbgGUI.activeSelf);
    }

(対象gameObject).activeSelfで対象オブジェクトのON/OFF状態を取得できる。
"!"でBoolを反転させ、SetActiveに渡すことでボタンを押すたびに状態を切り替えることができる。

あるPrefabと似た別のPrefabを作る場合、新たなインスタンスをゲーム内に生成し、それを選択した状態でGameObject->Break Prefab Instanceと選ぶのが手っ取り早い。

  • Undo/Redoが動作しない

どうもAsset Storeウィンドウを開いている状態だとEditのUndo/Redoが動作しないようだ。
http://answers.unity3d.com/questions/34086/undo-redo-disabled.html

  • GetMouseButtonDown/GetMouseButtonUpが1度のクリックで二度呼び出される。

どうもOnGUI(FixUpdateも?)の中でGetMouseButtonUpDown/Upを呼び出すと二度拾われるようだ。
マウスクリックを拾ってBoolを切り替えるような処理だと結果が同じになる。
http://forum.unity3d.com/threads/mouse-click-gets-catched-twice.10261/
http://answers.unity3d.com/questions/189404/inputgetmousebuttonup-returns-true-twice-for-one-m.html

  • Debug.Logで表示する文章に色をつける、というかマークアップする。
Debug.Log("<color=blue>List Length</color> = "+ movablePanel.Count);

とりあえずB, I, sizeはサポートされてるようだ。Uは無理だった。

http://docs-jp.unity3d.com/Documentation/Manual/StyledText.html

  • !dest.m_MultiFrameGUIState.m_NamedKeyControlList

どうもGUI関係の処理を書いているとこんなメッセージが出る。一応動作に問題はない模様。
Unity本体側のバグ?
http://unitystjp.wiki.fc2.com/wiki/%E3%82%A8%E3%83%A9%E3%83%BC

  • Spot LightやPoint Lightによりオブジェクトの形に対応した影を投影する

Edit->Project Settings->PlayerSettings->Other SettingsのRendering PathをDeferredに設定する。
Directional Light以外のライトでもオブジェクトの形に対応した影を投影できるようになる。
これでエミヤも安心である。
f:id:DYMN:20151106170459p:plain

  • 手持ちライトの照り返しが足元(初期位置)に残る

→足元のオブジェクトがStaticだと残る場合がある。これを解除する。