Menu
CoddyTech

建造平台

Coddy Unity 塔防游戏 课程的第 7 课,共 25 课。

玩家点击灰色建造平台来建造塔。点击会对应屏幕上的一个点,因此会形成一条射线:Camera.main.ScreenPointToRay 会返回从摄像机穿过该点的射线,而 Physics.Raycast 会报告它碰到的第一个碰撞体,也就是鼠标下方的那个。

Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue());
if (Physics.Raycast(ray, out RaycastHit hit))
{
    Debug.Log("Clicked " + hit.collider.name);
}

射线也会碰到地面、路径和树木。hit.collider.TryGetComponent(out BuildPad pad) 会检查碰到的物体是否是建造平台,这样其他点击就不会产生任何效果。这里的每个场景都使用 Input System,因此 Mouse.current 会读取鼠标(using UnityEngine.InputSystem;)。

challenge icon

挑战

中等

点击一个建造平台,在上面建造一座 Arrow 防御塔。

  1. 在 BuildPad 中添加 public Tower tower;。
  2. 在 BuildManager 中添加 [SerializeField] private Tower towerPrefab;。在 Update 中,当 Mouse.current.leftButton.wasPressedThisFrame 时,通过鼠标发射一条射线。
  3. 如果射线击中一个 tower 为 null 的 BuildPad,就设置 pad.tower = Instantiate(towerPrefab, pad.transform.position, Quaternion.identity);。

按“运行”,然后点击建造平台:每个平台上都会有一座防御塔。然后点击“检查”。

亲手试试

using UnityEngine;

// 后续实现:点击建造位置放置防御塔,以及商店和防御塔面板。
public class BuildManager : MonoBehaviour
{
}

Unity 塔防游戏中的所有课

自己练习: Unity 在线编辑器