【发布时间】: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 在这里