c# - 基于 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;
}
}
解决方案
我最终制作了另一个脚本来保持鼠标位置,以通过发送光线检查鼠标击中哪个构建区域,当我选择一个建筑物时,我正在使它的位置与鼠标击中的构建区域相同。
推荐阅读
- java - Android - 如何在通知面板中添加[切换按钮]?(您可以切换 Wifi、蓝牙、平面模式等的地方 ..)
- r - 如何根据 r 中的值列表对数据框进行子集化
- ruby-on-rails - 在 routes.rb 中重定向 301
- python - Functools 在将多个 txt 文件与 pandas 连接时减少了终止错误
- android - 键盘关闭后 RecyclerView 高度被包裹
- r - 有没有办法比较内容/检查 2 个 data.tables 的相等性,同时忽略 cols 的类差异
- c# - CngKey System.Security.Cryptography.CryptographicException 系统找不到 Azure 上指定的文件
- autodesk-forge - Autodesk forge SVF2 dbid
- selenium-webdriver - 带有边缘浏览器的机器人框架
- python - Python检查列表中是否存在用于检测循环的列表