我做了一个提示板跟随光标与位置UI鼠标位置(制作工具提示面板后续光标)
void Update() {
this.transform.position = Input.mousePosition;
}
在更新功能
。
面板“滞后”,在四分之一秒后移动到光标位置,以及它的一种令人讨厌的 有没有更好的方法来做到这一点?我可以以某种方式“粘贴”到光标? 下面是我从右向左移动鼠标时的外观。
面板IS在鼠标悬停的时候在光标下方,它只有在大力移动时才会关闭。
我做了一个提示板跟随光标与位置UI鼠标位置(制作工具提示面板后续光标)
void Update() {
this.transform.position = Input.mousePosition;
}
在更新功能
。
面板“滞后”,在四分之一秒后移动到光标位置,以及它的一种令人讨厌的 有没有更好的方法来做到这一点?我可以以某种方式“粘贴”到光标? 下面是我从右向左移动鼠标时的外观。
面板IS在鼠标悬停的时候在光标下方,它只有在大力移动时才会关闭。
这是统一的已知问题。
将鼠标位置绑定到任何gameObject的位置时,我们会面临滞后。这种滞后是由统一输入模块的鼠标位置记录引入的。 Reference1,Reference2。
解决方法:您可以在游戏中制作自己的光标并将其绑定到鼠标位置(因为您正在绑定UI面板)。游戏中的自定义光标对象将具有与面板相同的位置,因为这两个对象都将从相同的源派生它们的位置。你会得到一个免费的面板。:)
请记住隐藏默认光标。
是否有任何已知的黑客? 我想它并不那么重要。 – user2998964
包括一个可能的解决方法。 –
@programmer,我在编辑你的时候写了我的答案。请不要以其他方式认为。重要的是我们有解决这个问题的办法。无论如何,我们都有相同的解决这个问题,这使得它充分证明;)。 –
你不能直接指定Input.mousePosition;
到UI变换。您必须使用RectTransformUtility.ScreenPointToLocalPointInRectangle
将鼠标位置和画布转换为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);
}
确保画布分配给parentCanvas插槽。
编辑:
随着你的问题的原始图像,我还以为你是移动的UI总是在光标的一侧。在链接的视频之后,我刚刚意识到问题在于当对象移动到光标位置时存在延迟。
这是Unity的问题。 Unity目前正在重新设计InputSystem来解决这个问题。当前的解决方法是使用Cursor.visible = false;
禁用游标,然后使用另一个图标和光标图标作为游标。
在线查找好光标并将其分配给编者的mouseCursor插槽质感..
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位置。不要使用它。原因在于,当您更改“画布渲染模式”并分配相机时,Input.mousePosition
将不起作用,但RectTransformUtility.ScreenPointToLocalPointInRectangle
解决方案应该可以正常工作。
同样的效果,面板光标:( – user2998964
工作平稳在我身边经过的路径。什么是你的相机投影模式?什么是Canva的渲染模式?你统一的版本? – Programmer
尝试这种代码,我仍然得到滞后。 –
试了一下,看不出任何滞后。请分享一些关于您的应用,面板,脚本的更多信息。 –
如果我把30px30p面板,并使其跟随光标,与简单的Input.mousePosition我可以很容易地超过它我快速移动鼠标。 其他人不是这种情况吗? 我试图做空项目,仍然有同样的问题。我需要30p 30p面板始终在光标下。 – user2998964
工具提示面板,它是UI还是普通的GameObject?你慢什么意思?工具提示不在鼠标光标所在的位置?我想你应该放一个截图。 – Programmer