Programming Serendipity

プログラミングを中心に種々雑多に書き留めます

Unity5 メモ15

if(Application.isEditor) // Unityでゲームを起動した時true  
if(Debug.isDebugBuild) // build settingでdevelopment buildのときと、Unity側で起動したときtrue  
#if UNITY_EDITOR  
// Unity側で起動するときこの部分がコンパイルされる  
#endif  

iOSだけ、PS4だけの処理などもできる
Platform Dependent Compilation

  • グローバル#defineの定義
    Edit > Project Settings > Player > Player Setting > inspectorでother setting > scripting define symbols
    ここで、;区切りでそれぞれシンボルが#defineされる

  • 敵の弾の有効化・無効化
    敵の弾は敵の子オブジェクトにして発射時にそれを複製して飛ばしたいが、敵生成時にプレイヤーと当たるとそこで衝突判定が行われてしまい、
    弾が消えて複製元の弾を失ってしまう。
    弾だけ座標を遠くするやり方はしなくないので、enabledを操作しようと思ったが、うまくいかなかった。
    最終的にレイヤーを作成して、Edit > Project Setting > Physics2D からそのレイヤーの衝突判定を無効化して、
    弾を発射するときに弾のレイヤーを0(デフォルト)にして対処した。

  • PlayerPrefsにVector3、クオータニオンやそれらの配列など、標準で保存できない値を保存する
    ArrayPrefs2
    内部的に文字列に変換して保存している模様。

  • 音声の2重再生を防ぐヘルパー関数

void StopAndPlay(AudioSource audio)  
{  
    audio.Stop();  
    audio.Play();  
}  
  • 他のスクリプトから音声を再生
    GameObject.Find("SoundManager").SendMessage("Attack");
    (SendMessage()は何でも出来過ぎてしまうので多用はためらわれるが、これ以外に良い方法が思いつかなかった)