伸縮
オブジェクトの大きさ
オブジェクトのサイズを変更するには Transform クラスの localScale プロパティを用います。名前から想像できるように、このプロパティはオブジェクトのローカルなサイズを表します。
pubilc Vector3 localScale { get; set; }
オブジェクトのサイズは、常に親オブジェクトのサイズを継承します。したがって、オブジェクトの伸縮に関して絶対的なサイズの指定を行うことはできません。移動や回転などと異なり、オブジェクトのサイズは常にローカルなサイズであり、グローバルなサイズを設定することはできません。
using UnityEngine; public class NewBehaviourScript : MonoBehaviour { void Start () { transform.localScale = new Vector3(4, 1, 1); } }
コード1はサイズが 1 の立方体に対し X 軸のサイズを 4 に変更するスクリプトを実行した例です。実行結果のように、立方体のサイズが X 軸に対して伸びていることが確認できます。
親オブジェクトのサイズの影響を受けない、ワールド座標系のグローバルなサイズを取得したい場合は lossyScale プロパティを使います。このプロパティは読み取り専用なので、サイズを設定することはできません。
public Vector3 lossyScale { get; }
例えば、親オブジェクトのサイズが 0.5 で、子オブジェクトのサイズが 2 のとき、子オブジェクトの lossyScale プロパティは 1 を返します。
using UnityEngine; public class Test : MonoBehaviour { void Start () { transform.localScale = new Vector3(2, 2, 2); print(transform.lossyScale); } }
コード2の実行結果は Owner オブジェクトを親とする 2 つの立方体を用意し、そのうちの片方にスクリプトを設定して実行しています。この時、親である Owner オブジェクトのサイズを 0.5 に設定し、立方体のサイズはデフォルトの 1 のままで実行しています。
子オブジェクトである立方体は親オブジェクトのサイズを継承するため、実行前のグローバルなサイズは 0.5 となります。スクリプトから立方体のローカルなサイズを 2 に変更することで、最終的な立方体のグローバルなサイズは 1 になっています。
このように、グローバルなサイズを直接設定することはできませんが lossyScale プロパティから取得することはできます。