これを無効にするのはむしろ時間の無駄でしょうか、あいまいな理由で のパフォーマンスをさらに悪化させますか?
通常、UIの表示と非表示を切り替える3つの方法があります。私は最悪から最善までそれらをリストアップします。
.Instantiate(Show)、Destroy(Hide)。
public GameObject uiPanelPrefab;
void Start()
{
//Show
Instantiate(uiPanelPrefab);
//Hide
Destroy(uiPanelPrefab);
}
これは、毎回オブジェクトを作成して破棄します。 (推奨されません)。
。そのUIのゲームオブジェクトをアクティブ(非表示)または非表示(非表示)にします。
public GameObject uiPanelPrefab;
void Start()
{
//Show
uiPanelPrefab.SetActive(true);
//Hide
uiPanelPrefab.SetActive(false);
}
これはゴミにそれがアクティブに設定しても迅速なフリーズの原因とされるたびに作成されます。あなたは、VRアプリケーションを作るときにこれがたくさん気づくでしょう。デスクトップでうまくいく。携帯端末でうまくいかない、またはおすすめしていません。
。そのUIのComponent
を有効(表示)または無効(非表示)にします。
public GameObject uiPanelPrefab;
void Start()
{
//Show
uiPanelPrefab.GetComponent<Image>().enabled = true;
//Hide
uiPanelPrefab.GetComponent<Image>().enabled = false;
}
これは、単にコンポーネントを有効または無効にします。このメソッドでは、各コントロールに異なるコンポーネントが関連付けられているため、Button
,Text
,InputField
などの各UIコントロールのカスタム関数が必要です。これは特にモバイルデバイスで推奨される方法です。
は、これらとの長い実験の後、私は
#3が最善であるとused.The欠点は、各UIコントロールのすべてのコンポーネントを無効にする関数を作るために持っていることであるべきであるという結論に達しました。
たとえば、Button
コントロールには1つ以上のコンポーネントがあります。 Button
コンポーネントを無効にするだけでは、それは実行されません。 Button
,Image
およびText
のコンポーネントを無効にする単純な関数を記述する必要があります。以下のような何か:
void showButton(GameObject button, bool show, bool includeInactive = false)
{
Button bt = button.GetComponentInChildren<Button>(includeInactive);
bt.enabled = show;
Text txt = button.GetComponentInChildren<Text>(includeInactive);
txt.enabled = show;
Image img = button.GetComponentInChildren<Image>(includeInactive);
img.enabled = show;
}
使用上:
//Show
showButton(uiPanelPrefab, true);
//Hide
showButton(uiPanelPrefab, false);
は、破壊とインスタンス化はメモリを解放するための良いですが、あなたはそれを頻繁に使用していない場合に限ります。 特定のボタンがほとんどレンダリングされないと思われる場合は、そのボタンを破棄することを選択できます。 – Kokolo
Tavados - それはまったく無関係です。気にしないで。ボタンが使用されていない場合は、ボタンを非表示にします。それ以上のことはありません。 – Fattie
これは、ボタンを隠したり表示したりすることではありません。私の投稿は大きく編集されていて基本的にトピックが変更されているので、編集してもう少し説明します。 – Tavados