私はユニティに新しいスクリプトを作成するたびに取得したり、追加する一般的な方法は、私は常にすべてのコンポーネントのためのチェックの束をやってしまう私のスクリプトは次のように、依存:だからユニティ:コンポーネント
SpriteRenderer sr = gameObject.GetComponent<SpriteRenderer>();
if(sr == null)
sr = gameObject.AddComponent<SpriteRenderer>() as SpriteRenderer;
私は周りに遊んで、コンポーネントでこれを行うための一般的な方法を作ることを決めた、私は自分の新しいスクリプトに単に追加した次のコードを考え出した。そこにこのアプローチの主要な欠点がある、または同じタスクを完了するために他のいくつかのより良い方法がある場合は、おそらく使用している場合
T GetOrAddComponent<T>() where T : Component
{
T component = gameObject.GetComponent<T>();
if (component == null)
component = gameObject.AddComponent<T>() as T;
return component;
}
は、私はそれを試してみたと機能がうまく動作しますが、私は思ったんだけど既存の方法私は気づいていないか、または他の方法でメソッドを作成しています。 if文あなたがしたい場合は、1でそれをすべて行うことができ
は目を覚ましスタート/でそれを行うと、何も心配することはありません。 – Everts
私は 'return o.Get()?? o.Add () '(かなり' Tが冗長であることを確かめてください) –
SimpleVar
これはECSゲームエンジンのための全くパターンではありません。 – Fattie