Menu
CoddyTech

缩放

本课属于 Coddy Unity 学习旅程的“Unity 脚本基础”单元。第 33 课,共 85 课。

transform.localScale 会沿对象各个轴的方向缩放对象。默认立方体每条边长为 1 个单位,因此,localScale 为 (4, 1, 0.5) 的立方体宽 4 个单位、高 1 个单位、深半个单位。若要在各个方向上等比例缩放,请乘以 Vector3.one,它的值是 (1, 1, 1)。这个肥皂泡每秒变大 0.3 个单位,直到宽度达到 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) 会返回两个数中较小的那个,因此 size 会不断增大,直到达到 3,然后保持为 3。

缩放会以对象的枢轴为中心进行。对于 Unity 内置形状,枢轴位于中心。一个放在地面上的 1 个单位高的立方体,其中心的 y 坐标为 0.5。将它缩放到 3 个单位高后,它会从中心向上和向下各延伸 1.5 个单位,因此有一半会陷入地面。要让它立在地面上,中心必须位于高度的一半处:y = 1.5。

子对象的大小会乘以父对象的缩放值:如果子对象的 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:将位置的 y 设置为 size / 2,同时保持 x 和 z 不变。

按“开始”:冰块会缩小并保持在地面上。然后按“检查”。

亲手试试

using UnityEngine;

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

    void Update()
    {
        // 每秒按 melt 的值缩小,最小缩至 0.4,同时让底部保持贴地。
    }
}

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器