けいごのなんとか

Unityユーザーとしてのブログ。ギリギリ路線走ってます。

ドキュメントにないUnity独自のException

UnityにはドキュメントにはないExeptionが多数あります。

ドキュメント化されているのはPlayerPrefsExceptionだけなんですよね。

UnassignedReferenceException

主に変数に値がセットされていない場合に使用されるException

publicでInspector上にプロパティを表示したまま何もセットせずにいると発生

public GameObject obj; //中身は空

void Start ()
{
    Instantiate (obj);
}

MissingComponentException

コンポーネントを取得するGetComponent系でコンポーネントが取得できなかった場合に使用するException

void Start ()
{
    //Hogeというコンポーネントはこのゲームオブジェクトにアタッチされていない
    if (GetComponent<Hoge> () == null) 
        throw new MissingComponentException ();
}

MissingReferenceException

参照先が見つからない場合に使用されるException

private GameObject obj;

IEnumerator Start ()
{
    obj = new GameObject ("hoge");
    Destroy (obj); //削除
    yield return new WaitForEndOfFrame(); //削除されるまで待つ
    Debug.Log (obj.transform); //削除されたobjのtransformを取得する
}

ExitGUIException

GUIが表示出来ない、または表示したくない場合に使用されるException

通常このExceptionはログに表示されません。EditorScriptでは表示される場合があります

void OnGUI ()
{
    //try-catchするとわかりやすい
    try { 
        GUIUtility.ExitGUI (); //ExitGUIExceptionをスローするだけ
    } catch (ExitGUIException e) {
        Debug.Log (e);
    }

    GUILayout.Box ("hoge"); //try-catchを外すと表示されない
}

UnityException

Unityに関連するなんでもござれなException

大抵はメッセージを見て判断する