【问题标题】:Unity Grid Based Building (Snap to Grid) And Follow Mouse While Snapping基于 Unity 网格的建筑(捕捉到网格)并在捕捉时跟随鼠标
【发布时间】:2023-03-17 13:59:01
【问题描述】:

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

}

【问题讨论】:

  • 如果您已经尝试过,能否提供代码?
  • @PiotrKrankiewicz 在这里

标签: c# unity3d 2d


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多