Menu
CoddyTech

父级与子级

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

在层级中,将一个对象拖到另一个对象上,它就会成为另一个对象的子对象,并缩进显示在父对象下方。子对象会随父对象移动、旋转和缩放:移动父对象时,所有子对象都会跟着移动,无需在子对象上编写代码。

Unity 会存储子对象相对于父对象的位置。transform.localPosition表示这个偏移量,以父对象为基准测量;transform.position表示对象在世界中的位置。这个 Rider 是 Horse 的子对象,它的脚本会将 Rider 放在马的中心上方 1 个单位、后方半个单位处,无论马站在哪里:

void Start()
{
    transform.localPosition = new Vector3(0, 1, -0.5f);
}

当马位于 (4, 0.5, 2) 时,Rider 的position读数为 (4, 1.5, 1.5),而它的localPosition保持为 (0, 1, -0.5)。马继续行走时,position会改变,而localPosition不会改变。偏移量沿父对象自身的坐标轴测量,因此父对象旋转或缩放时,偏移量也会随之旋转或缩放。对于没有父对象的对象,localPosition和position相同。

challenge icon

挑战

中等

让旗帜位于桅杆底部,以船为参照。

  1. 在 Start() 中,数字(0.6,1,0)是以船(旗帜的父对象)为参照的。
  2. 在这一行,将 transform.position 改为 transform.localPosition。

按“开始”:旗帜会位于桅杆底部,也就是船上。然后按“检查”。

亲手试试

using UnityEngine;

public class Hoist : MonoBehaviour
{
    public float climb = 1f;

    void Start()
    {
        // 桅杆底部:相对于 Ship 向右 0.6,向上 1
        transform.position = new Vector3(0.6f, 1, 0);
    }

    void Update()
    {
        // 按住向上箭头键时,持续上升,直到相对于 Ship 的高度达到 4
    }
}

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器