当前位置: 首页 > 知识库问答 >
问题:

光标和鼠标位置对齐

徐飞尘
2023-03-14

我正在尝试突出显示由鼠标悬停的瓷砖。这是我的代码:

void Update ()
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

    RaycastHit hit;
    if (Physics.Raycast(ray, out hit))
    {
        Vector3 point = hit.point;
        Vector2Int gridPoint = Geometry.GridFromPoint(point);

        tileHighlight.SetActive(true);
        tileHighlight.transform.position = Geometry.PointFromGrid(gridPoint);
        if (Input.GetMouseButtonDown(0))
        {
          // ... 

编辑:

public class Geometry
{
    static public Vector3 PointFromGrid(Vector2Int gridPoint)
    {
        float x = -3.5f + 1.0f * gridPoint.x;
        float z = -3.5f + 1.0f * gridPoint.y;
        return new Vector3(x, 0, z);
    }

    static public Vector2Int GridPoint(int col, int row)
    {
        return new Vector2Int(col, row);
    }

    static public Vector2Int GridFromPoint(Vector3 point)
    {
        int col = Mathf.FloorToInt(4.0f + point.x);
        int row = Mathf.FloorToInt(4.0f + point.z);
        return new Vector2Int(col, row);
    }
}

光标对象不在鼠标下面,我如何修复和对齐它?

共有1个答案

邵轶
2023-03-14

您要将它转换为网格点,然后从网格转换为点。我们也没有看到您的转换代码。

我建议尝试这样做,至少在调试时是这样:

tileHighlight.SetActive(true);
tileHighlight.transform.position = hit.point;

编辑:

我假设你的网格是缩放的,所以它不适合计算的位置。您可以尝试以下代码:

public int grid_scale = 2; // play with this in the inspector


Vector3 snapped = Vector3.zero;
snapped.x = Mathf.Round(hit.point.x / grid_scale) * grid_scale;
snapped.z = Mathf.Round(hit.point.z / grid_scale) * grid_scale;

您可能需要添加一个偏移量来使它以瓷砖为中心。

 类似资料:
  • 我必须将鼠标光标(指针)移动到一个特定的元素,然后点击该元素。我已经写了下面的代码,但它没有帮助。虽然我可以看到光标类型(图像)正在改变,但它并没有改变它的位置。 请帮忙。下面是我的代码:

  • 问题内容: 在Linux下如何使用C程序在X窗口中设置 鼠标 光标的位置?谢谢:)(就像WIN中的setcursorpos()一样) 编辑:我尝试过此代码,但不起作用: 问题答案: 12.4- 移动指针 尽管通常 应将 指针的移动留给最终用户控制,但有时有必要在程序控制下将指针移动到新位置。 要将指针移动到窗口中的任意点,请使用XWarpPointer()。 例:

  • 问题内容: 有没有一种方法可以获取鼠标的位置并将其设置为var? 问题答案: 您可以设置一个回调来响应事件: 我不确定您想要哪种变量。在上面,我设置了局部变量并设置了鼠标坐标。 如果创建类方法,则可以设置实例属性和鼠标坐标,然后可以从其他类方法访问它们。

  • 有什么想法吗?提前谢了。

  • 本文向大家介绍vim 相对于光标位置滚动,包括了vim 相对于光标位置滚动的使用技巧和注意事项,需要的朋友参考一下 示例 命令 描述 z 在窗口顶部重新绘制当前行,然后将光标放在该行的第一个非空白字符上。 zt 喜欢z但将光标留在同一列中。 z. 在窗口中心重绘当前行,然后将光标放在该行的第一个非空白字符上。 zz 喜欢z.但将光标留在同一列中。 z- 在窗口底部重画当前行,然后将光标放在该行的第

  • 问题内容: 我正在尝试使用Jinput打印出鼠标位置: 这是我的InputManager,它在初始化时扫描所有输入设备,并将所有鼠标分离到单独的列表中: x和y的打印信息始终为0。我在Windows 10上运行此程序,是否会引起任何问题?如何使用Jinput从鼠标获取鼠标数据? 问题答案: JInput处于较低级别,您正在混淆窗口指针和鼠标。鼠标只是相对轴> 2的设备。每次轮询后或在每个事件中的值