首页 > 解决方案 > 基于 Unity 网格的建筑(捕捉到网格)并在捕捉时跟随鼠标

问题描述

我正在尝试构建一个 2d 策略游戏,您可以在其中构建基于网格的世界,并且所有建筑物都将具有不同的大小,例如 3x3、2x3,并且它们将根据它们的大小在网格上构建。在不让它们根据它们的大小对齐到网格的情况下,我可以让它们只跟随鼠标并在我想要的任何地方构建,但我需要让它们根据它们的大小对齐到网格。我怎样才能做到这一点?示例地图图像替代图像链接:https ://ibb.co/bQUeae

[编辑]:这是下面的最终代码。现在我可以根据鼠标的位置捕捉​​并跟随选定的建筑物,发送射线并检查建筑物网格,但这个动作仍然不取决于建筑物的大小。这是当前情况的视频。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;
    }

}

标签: c#unity3d2d

解决方案


我最终制作了另一个脚本来保持鼠标位置,以通过发送光线检查鼠标击中哪个构建区域,当我选择一个建筑物时,我正在使它的位置与鼠标击中的构建区域相同。


推荐阅读