建造平台
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;)。
挑战
中等点击一个建造平台,在上面建造一座 Arrow 防御塔。
- 在
BuildPad中添加public Tower tower;。 - 在
BuildManager中添加[SerializeField] private Tower towerPrefab;。在Update中,当Mouse.current.leftButton.wasPressedThisFrame时,通过鼠标发射一条射线。 - 如果射线击中一个
tower为 null 的BuildPad,就设置pad.tower = Instantiate(towerPrefab, pad.transform.position, Quaternion.identity);。
按“运行”,然后点击建造平台:每个平台上都会有一座防御塔。然后点击“检查”。
亲手试试
using UnityEngine;
// 后续实现:点击建造位置放置防御塔,以及商店和防御塔面板。
public class BuildManager : MonoBehaviour
{
}
Unity 塔防游戏中的所有课
自己练习: Unity 在线编辑器