我正在尝试构建一个2D策略游戏,您可以在基于网格的世界上进行构建,并且所有建筑物的大小都将不同,例如3x3、2x3,并且它们将根据其大小在网格上进行构建。无需根据它们的大小使它们对齐网格,我就可以使它们随鼠标移动并在我想要的任何位置构建,但是我需要根据它们的大小使其对齐网格。我该如何实现?Example Map Image备用图片链接:https://ibb.co/bQUeae
[EDIT]:这是下面的最终代码。现在,我可以根据鼠标的位置捕捉并跟随选定的建筑物,发送射线并检查建筑物的网格,但是此操作仍然不取决于建筑物的大小。这是当前情况的视频。 https://youtu.be/fCvsVznJ_4g
BuildingScript
[SerializeField]
private MousePositionChecker mousePositionChecker;
private Transform currentBuilding;
private bool hasPlaced;
// Update is called once per frame
void LateUpdate () {
if (currentBuilding != null && !hasPlaced)
{
//Vector3 m = Input.mousePosition;
//Vector3 p = Camera.main.ScreenToWorldPoint(m);
//currentBuilding.position = new Vector3(p.x, p.y, 0);
if(mousePositionChecker.mousePos)
currentBuilding.position = mousePositionChecker.mousePos.position;
if (Input.GetMouseButtonUp(0))
{
hasPlaced = true;
}
}
}
public void SetItem(GameObject b)
{
hasPlaced = false;
currentBuilding = ((GameObject)Instantiate(b)).transform;
}
MousePositionScript
public Transform mousePos;
// Update is called once per frame
void Update () {
Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D hit = Physics2D.Raycast(pos, Vector2.zero);
if (hit != null && hit.collider != null && hit.transform.tag=="BuildArea")
{
mousePos = hit.transform;
}
}
答案 0 :(得分:0)
我最终制作了另一个脚本来保持鼠标位置,以通过发送射线来检查哪个建筑区域鼠标被击中,当我选择建筑物时,我将其位置设置为与鼠标所击中的建筑区域相同。