将 UI 定位到鼠标位置(使工具提示面板跟随光标)

2023-12-01

我制作了一个跟随光标的工具提示面板

void Update () {
    this.transform.position = Input.mousePosition;  
}

在更新功能中。

The panel "lags" behind, moving to cursor position after quarter of a second, and its kind of annoying Is there a better way of doing this? Can i somehow "glue" it to the cursor? Here is how it looks when i move mouse from right to left.enter image description here

当鼠标静止时,面板位于光标下方,只有在剧烈移动时才会减弱。


You can't assign Input.mousePosition;直接到 UI 转换。你必须使用RectTransformUtility.ScreenPointToLocalPointInRectangle将鼠标位置和 Canvas 转换为 UI 可以理解的适当位置。

之后,您使用Canvas.transform.TransformPoint(result)获取应分配给 UI/面板位置的鼠标的最终位置。

该代码应该如下所示:

public Canvas parentCanvas;

public void Start()
{
    Vector2 pos;

    RectTransformUtility.ScreenPointToLocalPointInRectangle(
        parentCanvas.transform as RectTransform, Input.mousePosition,
        parentCanvas.worldCamera,
        out pos);
}

public void Update()
{
    Vector2 movePos;

    RectTransformUtility.ScreenPointToLocalPointInRectangle(
        parentCanvas.transform as RectTransform,
        Input.mousePosition, parentCanvas.worldCamera,
        out movePos);

    transform.position = parentCanvas.transform.TransformPoint(movePos);
}

确保将 Canvas 分配给parentCanvas 插槽。

EDIT:

对于您问题中的原始图像,我认为您正在移动的用户界面始终位于光标一侧。在链接视频之后,我刚刚意识到问题是当对象移动到光标位置时存在延迟。

这是Unity的问题。 Unity 目前正在重新设计输入系统来解决此问题。当前的解决方法是禁用光标Cursor.visible = false;然后使用另一个带有光标图标的图像作为光标。

在线找到好的光标并将其从编辑器分配给鼠标光标槽纹理。

public Canvas parentCanvas;
public RawImage mouseCursor;

public void Start()
{
    Cursor.visible = false;
}


public void Update()
{
    Vector2 movePos;

    RectTransformUtility.ScreenPointToLocalPointInRectangle(
        parentCanvas.transform as RectTransform,
        Input.mousePosition, parentCanvas.worldCamera,
        out movePos);

    Vector3 mousePos = parentCanvas.transform.TransformPoint(movePos);

    //Set fake mouse Cursor
    mouseCursor.transform.position = mousePos;

    //Move the Object/Panel
    transform.position = mousePos;
}

最后,你会注意到我没有使用Input.mousePosition直接设置UI位置。不要使用它。原因是当你改变Canvas RenderMode并分配Camera时,Input.mousePosition不会工作,但RectTransformUtility.ScreenPointToLocalPointInRectangle解决方案应该有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 UI 定位到鼠标位置(使工具提示面板跟随光标) 的相关文章

  • _bstr_t 内存泄漏

    我有一个 C 代码 但它没有正确释放内存 告诉我哪里错了 这是我的代码 1 void MyClass MyFunction void 2 3 for int i 0 i
  • fgetc 无法识别 EOF [重复]

    这个问题在这里已经有答案了 下面的程序在各种 Solaris Linux 版本上运行良好 但在 AIX 上运行不佳 但是 如果我更换while c EOF with while c 0xff 在 AIX 上它运行得很好 有什么想法吗 我检查
  • ASP.NET Identity Extend 方法来访问用户属性

    我可以扩展方法来访问用户属性吗 有这样的方法 User Identity GetUserId User Identity GetUserName 可以从视图和控制器访问它们 我想使用以下方法扩展此功能 User Identity GetUs
  • Visual Studio 2019:如何使用平台工具集 v140_xp?

    我正在尝试使用 Visual Studio 2019 编译适用于 Windows XP 的应用程序 为此 我尝试使用平台工具集 v140 xp 它不起作用 出现以下错误消息 C Program Files x86 MSBuild Micro
  • 从 QFile 获取句柄

    我有一个QFile 但我需要在其上调用一些仅接受HANDLE 有没有办法找回底层HANDLE of the QFile 我找到了一种使用的方法 get osfhandle 在 MinGW 和 VS 中可用 QFile file HANDLE
  • 在存储库模式中按 ID 进行过滤是否是不好的做法

    我正在使用 ASP NETMVC4 with 实体框架5 基本上每个控制器操作结果按登录用户的公司 ID 过滤数据库结果 我刚刚开始实现存储库模式来返回模型 而不是直接从控制器过滤 DbContext 将companyID传递到存储库中以过
  • 在 C++ 中将浮点值作为数组中的索引

    浮点值可以用作数组的索引吗 如果用作索引的表达式生成浮点值 会发生什么情况 float 值将被转换为 int 根据编译器的警告级别 它可能会给出警告或错误 s1 q 12 2 same as q 12 s2 q 12 999999 same
  • 什么是 .NET 程序集?

    什么是 NET 程序集 我浏览了网络 但无法理解其定义 程序集是 net 应用程序的最小部署单元 它可以是一个dll or an exe 它主要有两种类型 私人集会 dll 或 exe 是一个应用程序的专有财产 一般存放在应用程序根文件夹中
  • 如何在 OleDB 中将表名作为参数传递?

    private void button1 Click object sender EventArgs e string tablename label2 Text string name TextBox1 Text DBconnection
  • 如何获取结构数据的十六进制转储

    finalize char hdrs sendip data headers int index sendip data data sendip data pack 出于调试目的 我想要一个十六进制转储data and pack结构体 其类
  • 使用指针的合法遗留代码突然变成了UB

    假设我们有 C 98 的遗留代码 bool expensiveCheck struct Foo bool someFunc Foo ptr 0 if expensiveCheck ptr new Foo doing something ir
  • 如何在asp.net中创建动态复选框

    我正在创建一个需要添加动态复选框列表的应用程序 请任何人告诉我如何使用 C 添加动态复选框列表 在表单上放置一个带有 ID 的占位符placeHolder并将以下代码添加到您的Page Load CheckBoxList cbList ne
  • 如何可靠地判断 boost 线程是否已退出其 run 方法?

    我以为 joinable 会表明这一点 但事实似乎并非如此 在工人阶级中 我试图表明它仍在通过谓词进行处理 bool isRunning return thread gt joinable 已经退出的线程不是不能加入吗 我错过了什么 boo
  • 带有 Null 的 Soap WSDL

    我需要在函数中指定一个可为空的参数 这不起作用
  • 使用DataContractSerializer进行序列化,但无法反序列化回来

    我有以下两个功能 public static string Serialize object obj DataContractSerializer serializer new DataContractSerializer obj GetT
  • 抽象类、构造函数和 Co

    嗯 我正在尝试重用 C 代码的一部分 它是一个带有UDP服务器的抽象类 可以在这里看到 http clutch inc com blog p 4 http clutch inc com blog p 4 我创建了一个像这样的派生类 publ
  • 如何检查c#代码中死锁的可能性

    我的应用程序有时会停止在下面的代码中 并非总是如此 但有时会停止 全部3种方法CalcQuarterlyFigures CalcWeeklyFigures CalcMonthlyFigures return Task
  • 静态编译器和运行时编译器等术语的实际含义是什么?

    我正在努力学习更多 C 并尝试了解有关不同编译器及其技术的基础知识 我用谷歌搜索了很多次 但每次我都碰巧遇到需要更多解释的新术语 那么 本主题中的静态编译 动态链接等术语实际上意味着什么 某些语言 例如 C 在开始运行 即实际使用 之前将所
  • 使用 C# 解码 Git 索引文件

    有没有关于Git索引文件内部结构的文档 从各种书籍中我知道它是二进制的并且包含暂存文件的 SHA 我知道 Git plumbing 命令有助于揭示索引内容 但是 例如 我自己使用 C 读取索引怎么样 我知道这个功能有几种实现方式 所以可以研
  • LWG1203“更有用的右值流插入”是否追溯应用于 C++11 或 C++20?

    灵感来自我最近的问题中的讨论 https stackoverflow com questions 69320918 why does taking istream to a temporary stringstream work but n

随机推荐

  • Javascript构造函数返回值[重复]

    这个问题在这里已经有答案了 考虑以下代码 function Foo return something var foo new Foo 根据 JavaScript 专家的说法 他们说构造函数返回 无 或仅返回 this 这是什么原因呢 我知道
  • Angular 2 组合表单验证

    我想知道如何在 Angular2 中与控制组中的 OR 语句进行组合验证 例如 我有三个输入字段 我想将 1 个输入字段设置为必填项 将另外两个输入字段设置为 OR 之类的必填项 输入姓名 必填 输入电子邮件 或 输入电话 必填 this
  • 在 EF 代码中删除首先会导致导航属性设置为 null 和空

    当我首先使用 EF 代码执行删除时 我注意到一些有趣的事情 我使用以下域模型 public class User public virtual long Id get set public virtual string Name get s
  • HTMLCollection 出现在控制台中,包含许多元素,但长度为 0

    我试图抓取页面上的一堆 span 元素 其格式如下 div class ca evp1 te style color 2952A3 span class te t 11am nbsp span span class te s Antoine
  • 参考:类型错误:无法从未定义中读取属性[此处的属性名称]

    源自TypeError Cannot call method read property set property of null in Google Apps Script 的规范问题 建议参考以下问题 Why the 项目中GS文件的执
  • Aurelia CLI & TypeScript & MomentJS

    我没有让 Aurelia CLI 和 TypeScript 和 MomentJS 一起工作 我已经看到了 Aurelia 和 Moment 问题的解决方案 但他们不使用 Aurelia CLI 这就是我现在正在做的事情 使用 Aurelia
  • ReentrantLock 不起作用

    我不明白为什么代码不能正常工作 问题是 ReentrantLock 不会锁定 ThreadClass run 中的方法调用 假定其方法被锁定在 ThreadClass 中的资源类 public class ResourceClass pri
  • Jquery 根据输入值显示输入文本

    我的 jquery 面临着基于输入值显示输入文本的问题 这是 JS 小提琴演示 http jsfiddle net Ltapp 364 当我尝试输入 hotmail时 输入框会显示 但是当我想在 hotm输入框中输入一些文本时 它会再次隐藏
  • 如何隐藏折线图中数据点的标签

    请参考下图 基本上我有一个 C 图表控件 上面有一些系列 我有一个带标签的系列 图中的红线 但我希望能够打开 关闭标签 那可能吗 我找不到任何可以这样做的属性 多谢 缺少清除文本labels一种简单的方法是使颜色透明 你可以为整体做到这一点
  • Cocoa - loadNibNamed:owner:topLevelObjects: 来自加载的包

    在基于文档的 Cocoa 应用程序中 我使用以下方法实例化外部包中的多个对象 插件 NSMutableArray getPluginsOfType Class type NSBundle main NSBundle mainBundle N
  • 没有 jQueryUI 的 jQuery 模态对话框 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想知道如何实现带有背景覆盖的模式对话框 使用 jQuery 而不使用 jqueryUI 插件 有很多 jQuery 插件可以为您处理模式窗口 就我个人而言 我用过简单模态取得了
  • Task.Run 具有取消支持

    考虑this Task Run example 它展示了如何创建支持取消的任务 我正在做类似的事情 Task Run gt while token IsCancellationRequested token 我的问题 既然我已经有了对取消令
  • 有什么方法可以强制在 NSArray、NSMutableArray 等上进行输入吗?

    我可以做一个NSMutableArray实例 其中all元素属于类型SomeClass 还没有人把它放在这里 所以我会这样做 Objective C 现已正式支持这一点 从 Xcode 7 开始 您可以使用以下语法 NSArray
  • 使用包含 $0 的动态字符串替换文本时遇到问题

    我在用Regex替换模板中的所有字符串 一切正常 直到出现一个我想要替换的值 即 0 00 我似乎无法正确更换 0作为替换文本 我得到的输出是 Project Cost ProjectCost 00 知道为什么吗 这是带有一些简化变量的代码
  • 如何使用 Gremlin 选择可选的图形结构?

    我正在使用 Gremlin 查询存储在 TitanDB 中的图表 该图包含具有属性 例如 描述 的用户顶点 以及表示用户之间关系的边 我想使用 Gremlin 来获取 1 按属性的用户以及 2 与其他用户的可能关系 例如 我可以使用以下查询
  • 如何将 taglibs JSTL/core 与 WEB-INF 文件夹中的 JAR 一起使用

    目前 我已经使用 JSP 页面顶部的以下标记设置了标记库并正常工作 在 Maven 中我有依赖项
  • Azure SQL 数据库在本地运行时可以工作,但在发布到 Azure 时则无法工作

    这几天来一直困扰着我 但我就是无法解决 我按照在线教程向您展示了如何使用实体框架中的模型优先方法连接和使用 Azure 数据库 这样 您必须设置数据库迁移 以便在将网站发布到 Azure 时更新 Azure 数据库 我已经在 Azure 上
  • 如何使直方图中的标签响应动态用户输入

    我有以下工作代码 它获取输入数据并根据阈值显示直方图 如果您运行下面的代码 则该代码可以正常工作 当您拖动滑动条时 直方图会发生变化 然而标签26 GENES当我们拖动阈值时不会改变 从 1 5 到 2 我预计值会更改为30 GENES 这
  • Dart 中的异步编程

    我与java有关如何执行线程 异步 我使用 new Thread target start 其中 target 是 Runnable 作为在 java 中执行线程的一种方法 新的并发 api 有替代方案 但我们知道在特定调用时会创建新线程并
  • 将 UI 定位到鼠标位置(使工具提示面板跟随光标)

    我制作了一个跟随光标的工具提示面板 void Update this transform position Input mousePosition 在更新功能中 The panel lags behind moving to cursor