Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于统一网格的建筑(捕捉到网格)并在捕捉时跟随鼠标_C#_Unity3d_2d - Fatal编程技术网

C# 基于统一网格的建筑(捕捉到网格)并在捕捉时跟随鼠标

C# 基于统一网格的建筑(捕捉到网格)并在捕捉时跟随鼠标,c#,unity3d,2d,C#,Unity3d,2d,我正在尝试建立一个2d战略游戏,在这个游戏中,你可以建立在一个基于网格的世界上,所有的建筑都会有不同的大小,比如3x3,2x3,它们会根据它们的大小建立在网格上。我不需要根据它们的大小使它们捕捉到网格,我可以让它们跟随鼠标,在我想要的地方构建,但我需要根据它们的大小使它们捕捉到网格。我怎样才能做到这一点?备用图像链接: [编辑]:下面是最终代码。现在,我可以根据鼠标位置捕捉并跟踪选定的建筑,发送光线并检查建筑网格,但此操作仍然不取决于建筑的大小。这是一段当前情况的视频 最后,我制作了另一个脚本来

我正在尝试建立一个2d战略游戏,在这个游戏中,你可以建立在一个基于网格的世界上,所有的建筑都会有不同的大小,比如3x3,2x3,它们会根据它们的大小建立在网格上。我不需要根据它们的大小使它们捕捉到网格,我可以让它们跟随鼠标,在我想要的地方构建,但我需要根据它们的大小使它们捕捉到网格。我怎样才能做到这一点?备用图像链接:

[编辑]:下面是最终代码。现在,我可以根据鼠标位置捕捉并跟踪选定的建筑,发送光线并检查建筑网格,但此操作仍然不取决于建筑的大小。这是一段当前情况的视频


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

如果您已经尝试过任何操作,您能提供代码吗?@PiotrKrankiewicz
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;
    }

}