사물 간 거리
Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 67개 중 21번째.
Vector3.Distance(a, b)는 세 축 모두를 가로지르는 직선으로 측정했을 때 두 점 사이의 거리를 단위로 나타냅니다. 두 점 사이를 이동하는 거리인 (a - b).magnitude이므로 a와 b의 순서는 중요하지 않습니다. (0, 0, 0)에서 (3, 0, 4)까지의 거리는 5입니다.
거리를 숫자와 비교하면 스크립트가 어떤 대상이 가까이 있는지 알 수 있습니다. 이 야영자는 캠프파이어로부터 4단위 이내에 있을 때만 손을 따뜻하게 할 수 있으며, 캠프파이어의 위치는 Inspector에서 설정합니다.
public Vector3 campfire = new Vector3(3, 0, 4);
void Update()
{
float d = Vector3.Distance(transform.position, campfire);
if (d < 4f && Input.GetKeyDown(KeyCode.Space))
{
Debug.Log("You warm your hands");
}
}거리는 높이도 계산합니다. 불 위로 5단위 높이에 있는 야영자는 불에서 0이 아니라 5단위 떨어져 있습니다. 높이를 계산에 포함하지 않아야 할 때는 y가 같은 두 점을 비교하세요.
챌린지
쉬움워커가 늪을 가로질러 이동합니다. 늪 중심에서 3유닛 이내에서는 swamp(Inspector에서 설정) 이동 속도가 speed의 절반이고, 더 멀리 떨어지면 최고 속도로 이동합니다. 이동 코드는 작성되어 있습니다. 각 프레임에서 사용할 속도를 계산하고, speed 필드 자체는 변경하지 마세요.
Play를 눌러 늪을 통과한 다음, Check를 누르세요.
직접 해보기
using UnityEngine;
public class Walker : MonoBehaviour
{
public float speed = 4f;
public Vector3 swamp = new Vector3(0, 0.5f, 0);
void Update()
{
float s = speed;
// swamp에서 3유닛 이내에 있으면 절반 속도로 이동합니다.
Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
transform.position += direction.normalized * s * Time.deltaTime;
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.