Programming Serendipity

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

Unity5 メモ2

  • コンポーネントのアタッチし忘れ防止
    [RequireComponent(typeof(Rigidbody2D))]
    をクラス宣言の上に書くと、このスクリプトを取り付けたgameobjectに自動的にRigidbody2Dを付けられ、付け忘れ防止になる
    typeofの中にスクリプト名を書いて、特定のスクリプトを必須にすることもできる。
    Imageなど、UI関連のコンポーネントcanvasの子のgameobjectにしか適用できない

  • canvasの描画順
    canvas内要素の上から下に順に描画される
    複数canvas間で描画順を制御したい場合、CanvasCanvasコンポーネントのSort Orderを調整する(数字が大きいほうが手前)
    Render ModeをScreen Space - Cameraにすれば、描画順調整にSortingLayerを使用できるが、 他のcanvasもRender Modeを変える必要がある。
    cf. http://albatrus.com/main/unity/7402

  • enum最大数の取得
    UnityではSystem.Enum.GetValues(EnumType).LengthでEnumTypeに含まれる要素の数が取得できる。

  • 複数のオブジェクトをインスペクター上の配列に一括で追加する
    https://www.youtube.com/watch?v=TnJhhz120js (0:20-0:50)

  • ドラッグでオブジェクトを移動

    if(Input.GetMouseButton(0)){  
        float speed = 20f;  
        float mouseX = Input.GetAxis("Mouse X") * speed;  
        float mouseY = Input.GetAxis("Mouse Y") * speed;  
        Debug.Log("x : " + mouseX + ", y : " + mouseY);  
        transform.localPosition += new Vector3(0, mouseY, 0);              
    }  
  • const
    constはintなど基本型にしか付けられない。

  • vector3など構造体をデフォルト引数にする
    void hoge(Vector3 s = default(Vector3)){
    で(0, 0, 0)がデフォルト引数として使われる。
    0以外の場合は、 以下のようにnull許容型で対応できる。

    void hoge(Vector3? s = null){  
        Vector3 pos = s ?? new Vector3(10, 20, 30);  
    }
  • 画面サイズの違いでのUIの変化を確認する
    Unityでプレイ中にGameウインドウを拡縮すると違いがわかる

  • 可変レイアウト
    stretchでは解決できない、画面サイズが変わっても画面の左から1/3の位置に置きたいというような場合、
    (Horizontal/Vertical/Grid) Layout Group を使用すると、
    子要素の数に応じて自動的にレイアウトが均等に割り振られる。