부모와 자식
Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 67개 중 24번째.
Hierarchy에서 다른 오브젝트 위로 드래그한 오브젝트는 그 오브젝트의 자식이 되며, 부모 아래에 들여쓰기되어 표시됩니다. 자식은 부모와 함께 이동하고 회전하며 크기가 조정됩니다. 부모를 이동하면 모든 자식도 따라오므로, 자식에 코드를 작성할 필요가 없습니다.
Unity는 자식의 위치를 부모를 기준으로 저장합니다. transform.localPosition은 부모를 기준으로 측정한 오프셋이고, transform.position은 월드 공간에서의 위치입니다. 이 기수는 Horse의 자식이며, 스크립트는 Horse가 어디에 있든 기수를 Horse 중심에서 위로 1 unit, 뒤로 반 unit 위치에 앉힙니다.
void Start()
{
transform.localPosition = new Vector3(0, 1, -0.5f);
}Horse가 (4, 0.5, 2)에 있으면 기수의 position은 (4, 1.5, 1.5)이고, localPosition은 (0, 1, -0.5)로 유지됩니다. Horse가 계속 걸어가면 position은 바뀌지만 localPosition은 바뀌지 않습니다. 오프셋은 부모 자체의 축을 기준으로 측정되므로, 부모가 회전하거나 크기가 조정되면 오프셋도 함께 회전하고 크기가 조정됩니다. 부모가 없는 오브젝트의 경우 localPosition과 position은 같습니다.
챌린지
중급Flag는 Ship의 자식이며, 배는 월드의 중심에 있지 않습니다. 깃발의 Start()는 배를 기준으로 오른쪽으로 0.6, 위로 1만큼 떨어진 돛대 밑동에 깃발을 놓으려 하지만, 그 숫자들을 position에 기록하므로 깃발은 배에서 떨어진 곳에 놓입니다.
- 깃발이 돛대 밑동에서 시작하도록
Start()를 수정하세요. - 위쪽 화살표를 누르고 있는 동안 깃발을 올리세요. 깃발은 배를 기준으로 측정한 높이가 돛대 꼭대기인 4가 될 때까지 초당
climb단위로 올라가며, 그곳에서 멈춥니다.
Play를 누르고 위쪽 화살표를 누른 다음 Check를 누르세요.
직접 해보기
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가 될 때까지 올라갑니다
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.