Menu
CoddyTech

スケール

CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 33/85。

transform.localScaleは、オブジェクトの各軸に沿ったサイズを倍率で変えます。標準のキューブは各辺が1単位なので、localScaleが(4, 1, 0.5)のキューブは、幅が4単位、高さが1単位、奥行きが半単位になります。すべての軸で同じサイズにするには、Vector3.one((1, 1, 1))を乗算します。このシャボン玉は、幅が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です。

challenge icon

チャレンジ

中級

氷のキューブを0.4まで溶かし、地面に置いたままにします。

  1. フィールド float size = 1f; を追加します。Update() で、size = Mathf.Max(size - melt * Time.deltaTime, 0.4f); を設定します。
  2. transform.localScale = Vector3.one * size; を設定します。
  3. 底面を y = 0 に保ちます。x と z はそのままにして、位置の y を size / 2 に設定します。

「プレイ」を押すと、キューブが縮み、地面にとどまります。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class Melt : MonoBehaviour
{
    public float melt = 0.2f;

    void Update()
    {
        // 底面を地面につけたまま、毎秒meltずつ0.4まで縮小する
    }
}

Unityスクリプトの基礎のすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド