Menu
CoddyTech

건설 발판

Coddy의 Unity 게임: 타워 디펜스 코스 레슨. 18개 중 5번째.

플레이어는 경로 옆의 회색 사각형인 빌드 패드를 클릭해 타워를 짓습니다. 클릭은 화면의 픽셀 위치에서 발생하고 패드는 3D 월드에 있으므로, 클릭은 광선이 됩니다. Camera.main.ScreenPointToRay(point)는 카메라에서 시작해 해당 화면 지점을 통과하여 씬으로 향하는 광선을 반환하고, Physics.Raycast는 그 광선을 따라가며 광선이 처음으로 맞힌 콜라이더를 보고합니다. 즉 플레이어가 마우스 아래에서 보고 있는 대상입니다. 클릭한 블록을 색칠하는 페인트 도구는 다음과 같습니다:

void Update()
{
    if (!Mouse.current.leftButton.wasPressedThisFrame)
    {
        return;
    }

    Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue());
    if (Physics.Raycast(ray, out RaycastHit hit) && hit.collider.TryGetComponent(out Paintable block))
    {
        block.Paint(brushColor);
    }
}

&&의 두 번째 부분은 광선이 무언가에 맞았을 때만 실행되므로 hit에 값이 채워집니다. 그런 다음 TryGetComponent는 맞은 대상이 우리가 관심 있는 대상인지 확인합니다. 광선은 땅, 경로, 나무에도 맞지만, 이 대상들에는 Paintable이 없으므로 클릭해도 아무 일도 일어나지 않습니다.

여기 있는 모든 씬은 Unity 6의 Input System만 사용하므로, Mouse.current가 마우스를 읽습니다. 마우스 위치는 화면 픽셀 단위이며, 이것이 ScreenPointToRay가 기대하는 값입니다.

challenge icon

챌린지

중급

패드에는 BuildPad 스크립트가 있고, Game 오브젝트에는 towerPrefab이 ArrowTower 프리팹인 BuildManager가 있습니다.

  1. BuildPad.cs에 Tower 유형의 public 필드 tower를 추가하세요. 이 필드는 이 패드에 건설된 타워를 나타내며, 타워가 없으면 null입니다.
  2. BuildManager에 직렬화된 private 필드 towerPrefab(Tower)을 추가하세요. Update에서 이번 프레임에 마우스 왼쪽 버튼을 눌렀을 때 카메라에서 마우스 방향으로 광선을 쏘세요.
  3. 광선이 BuildPad를 가진 콜라이더에 닿고 해당 패드에 아직 타워가 없다면, 패드의 위치에 towerPrefab을 인스턴스화하고 새 타워를 패드의 tower에 저장하세요. 타워가 있는 패드나 패드가 아닌 대상은 아무 동작도 하지 않습니다.

Play를 누르고 패드를 몇 개 클릭한 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

// 나중에 추가할 기능: 건설 패드를 클릭해 타워를 배치하는 기능, 상점, 타워 패널.
public class BuildManager : MonoBehaviour
{
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Unity 게임: 타워 디펜스의 모든 레슨