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