首页 > 解决方案 > 当默认值是其他东西时,将 Texture2D 设置为“无”

问题描述

public void OnPointerEnter(PointerEventData data)
{
     Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
}

我在游戏中的每个 UI 上都设置了这个方法(和一个退出方法)。但是,当我将其设置为 null 时,它会转到 DEFAULT 游标。现在有了 Unity,我已经进入项目设置并为用户设置了一个自定义光标。但是,当用户继续使用 UI 时,我希望光标 Texture2D 为“无”,并将其设置为 null 只会将其设置为我开始使用的自定义光标。

我知道我可以执行“void Start()”并将光标设置为我的自定义光标,并将我的默认光标设置为“无”,但由于此脚本在我游戏中的每个 UI 上运行,它只会让更多感觉将我的默认设置为自定义设置并在某些情况下使用 c# 将其设置为“无”。

标签: c#unity3d

解决方案


更新答案:

你想做的事情是不可能的。

您需要将 Player Settings 中的 DefaultCursor 设置为 None,然后在要使用自定义光标时显式设置光标,从而允许 SetCursor(null, Vector2.zero, CursorMode.Auto) 引用系统指针光标。

创建一个 CursorManager 脚本并从需要更新光标的任何 UI 元素中访问它可能是值得的。在该脚本中,您可以编写一个方法,例如:

public Texture2D GetCursor(string aCursor) {
    switch (aCursor) {
        case "none":
            return null;
        case "custompointer":
            return ...
        // Rest of implementation goes here
    }
}

然后,为您的 UI 元素提供对该脚本的引用并在需要时调用该方法。

public void OnPointerEnter(PointerEventData data)
{
    Cursor.SetCursor(CursorManager.GetCursor("none"), Vector2.zero, CursorMode.Auto);
}

原始答案(不起作用):

下面的方法不起作用,因为虽然您可以通过代码设置 PlayerSettings.defaultCursor,但它不能在运行时更新或更改。它将在构建时设置 defaultCursor。

在您希望使用默认系统光标的 OnPointerEnter 方法上,您需要在当前的 SetCursor 调用之前加上 PlayerSettings.defaultCursor 分配。我没有对此进行测试,但以下应该可以工作。

PlayerSettings.defaultCursor = null;
Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);

然后,在 OnPointerExit 方法上将 PlayerSettings.defaultCursor 设置为您的自定义默认光标 Texture2D。


推荐阅读