スケール
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 25/67。
transform.localScaleは、オブジェクトの各軸に沿ったサイズを拡大縮小します。デフォルトの立方体はどの辺も1単位なので、localScaleが(4, 1, 0.5)の立方体は、幅が4単位、高さが1単位、奥行きが半単位になります。均等なサイズにするには、(1, 1, 1)であるVector3.oneを乗算します。このシャボン玉は、幅が3単位になるまで毎秒0.3ずつ大きくなります。
public float size = 1f;
void Update()
{
size = Mathf.Min(size + 0.3f * Time.deltaTime, 3f);
transform.localScale = Vector3.one * size;
}Mathf.Min(a, b)は2つの数値のうち小さい方を返すため、sizeは3に達するまで大きくなり、その後は3のままになります。
スケールはオブジェクトのピボットを基準に適用されます。Unity組み込みの形状では、ピボットは中心です。地面に置かれた1単位の立方体の中心はy = 0.5にあります。高さを3単位に拡大すると、そこから上に1.5、下に1.5伸びるため、半分が地面に沈みます。地面に立たせるには、中心を高さの半分の位置、つまりy = 1.5にする必要があります。
子オブジェクトのサイズは親オブジェクトのサイズに乗算されます。スケールが2の親の下にあるlocalScaleが(1, 1, 1)の子は、2倍の大きさで描画されます。transform.lossyScaleを使うと、ワールド空間での最終的なサイズを読み取れます。これは読み取り専用です。設定するのはlocalScaleです。
チャレンジ
中級氷の立方体が溶けています。ゲーム開始時から、サイズが1から0.4になるまで、毎秒各軸方向にmelt(0.2)ずつ縮小し、その後はそのサイズのままです。
中心を基準に縮小すると浮いてしまうため、常に底面が地面(y = 0)に接するようにしてください。xとzは変化しません。
Playを押して溶ける様子を確認し、次にCheckを押してください。
自分で試してみよう
using UnityEngine;
public class Melt : MonoBehaviour
{
public float melt = 0.2f;
void Update()
{
// 底面を地面につけたまま、毎秒meltずつ0.4まで縮小する
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。