父级与子级
本课属于 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相同。
挑战
中等让旗帜位于桅杆底部,以船为参照。
- 在
Start()中,数字(0.6,1,0)是以船(旗帜的父对象)为参照的。 - 在这一行,将
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 在线编辑器