RectTransform
のSetInsetAndSizeFromParentEdge
メソッドを試してみてください。あなたのコードは次のようになります:
public Slider healthSlider;
public GameObject healthRect;
private float sliderSize = 100;
void Update()
{
healthRect.GetComponent<RectTransform>().SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0, sliderSize);
sliderSize += Time.deltaTime;
}
これは、右側に「拡大」しながらスライダーを左に並べたままにします。 2番目のパラメータでは、スライダの左側が親に対して相対的な位置に配置されます。
注:更新機能でGetComponent
を呼び出すと、あなたはStart
でRectTransform
への参照をキャッシュして、そのようにそれを使用する必要があり、非効率的である:
それをやって
public Slider healthSlider;
public GameObject healthRect;
private float sliderSize = 100;
private RectTransform healthRectTransform;
void Start()
{
healthRectTransform = healthRect.GetComponent<RectTransform>();
}
void Update()
{
healthRectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0, sliderSize);
sliderSize += Time.deltaTime;
}
この方法は、あなただけGetComponent
を呼び出す必要があることを意味より効率的なStart
関数で1回実行されます。
メモメモ:あなただけのインスペクタでhealthRect
ゲームオブジェクトを割り当て、唯一それがRectTransform
コンポーネントです得るためにそれを使用している場合、あなたはこの変数を削除することができ、ちょうどインスペクタでhealthRectTransform
フィールドを割り当て、Start
で一部をスキップ方法。
ありがとうございました!それにもかかわらず、なぜGetComponentをキャッシュしなければならないのか分かりません。 – Ay0m3
そうしないと、すべてのフレームで 'GetComponent'が呼び出されます。これは、すべてのフレーム*で必要なコンポーネントのgameObject全体を検索していることを意味します。参照をキャッシュするとコンポーネントが一度取得され、代わりにローカルメンバー変数が使用され、毎回それを探す必要がありません。あなたはより多くの情報が必要な場合は、あなたはそれをGoogleすることができます。そこには数百万のブログ/フォーラムスレッドがあります。 :) –