Programming Serendipity

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

Unity5 メモ29

  • ショートカット
    Ctrl+Shift+A = Add Component
    Ctrl + 数字キー = 対応するウィンドウにフォーカスする。
    特にCtrl + 3(インスペクター)とCtrl + 4(ヒエラルキー)が利用頻度が高い。

  • スライスしたスプライトを動的に変更
    testという画像をスライスして生成されたtest_0からtest_9までスプライトがあるとして、
    uiIcon.sprite = System.Array.Find<Sprite>(Resources.LoadAll<Sprite>("test"), (x) => x.name.Equals(((Mathf.Abs(count)) % 10).ToString("test_0")));
    ref: Multiple Spriteを動的に変更する方法

  • スクロールバーを非表示(改良版)
    前回のものはスクロールバーサイズの初期値に左右されることが確認されたので、改良した。
    前回同様スクロールバーのあるGameObjectにアタッチして使用できる。

[SerializeField] RectTransform container;  
[SerializeField] RectTransform content;  
void Start ()   
{  
    // 表示領域が内容の領域より小さければスクロールが必要  
    gameObject.SetActive(container.rect.height < content.rect.height);  
}  

ref: How to auto-enable/disable scrollbar in new UI

  • オブジェクトプールでAddListenerをスクリプトから行う際の注意点
void func(int n){  
    button.onClick.RemoveAllListeners(); ///< これがないとイベントが無限にたまっていく  
    button.onClick.AddListener(() => SomeFunc(n));  
}  
  • ボタンが反応しない
    ボタンの上にオブジェクトがあり、クリックイベントを吸収してしまっている可能性がある。
    特にTextがフォントサイズ以上にwidth,heightをとっている場合見た目からは気付きにくい。
    BestFitを活用するか、width heightを指定する場合は1,1にしてイベントを横取りしないようにし、大きさはfont sizeで調整するなどの対策がバグを未然に防ぐためには必要になると思われる。