基于Unity网格的建筑物(捕捉到网格)并在捕捉时跟随鼠标

时间:2018-08-04 14:05:28

标签: c# unity3d 2d

我正在尝试构建一个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;
    }

}

1 个答案:

答案 0 :(得分:0)

我最终制作了另一个脚本来保持鼠标位置,以通过发送射线来检查哪个建筑区域鼠标被击中,当我选择建筑物时,我将其位置设置为与鼠标所击中的建筑区域相同。