鼠标光标在WebGL上没有变化

时间:2017-06-29 07:06:55

标签: c# html5 unity3d mouse-cursor unity-webgl

 using System.Collections;
 using System.Collections.Generic; 
 using UnityEngine;

 public class mouseScript : MonoBehaviour {

 public Texture2D cursorTexture;
 public CursorMode cursorMode = CursorMode.Auto; 
 public Vector2 hotSpot = Vector2.zero;

 // Use this for initialization
 void Start () {

 }

 // Update is called once per frame
 void Update () {

 }
 void OnMouseEnter()
 {
     Debug.Log("texture mouse " + cursorTexture + "  cusor visiblity" + Cursor.visible); 
     Cursor.SetCursor(cursorTexture, hotSpot, cursorMode);
 }
 void OnMouseExit()
 {
     Cursor.SetCursor(null, Vector2.zero, cursorMode);
 }

}

我更改了鼠标图像属性:

  • 纹理类型 - 光标
  • 读/写 - 启用html5 - 覆盖webgl
  • 最大尺寸 - 32
  • 格式 - RGB
  • 压缩 - DXT1

我用这个编码来改变鼠标光标。在Unity编辑器中它正常工作,当我导出到html5鼠标时,光标没有改变。

当我在浏览器中调试场景时,它会显示如下错误:

  

加载此网址时出错:无法加载blob的来源:http://localhost:56077/f3a83177-83ac-4798-81fe-1b07da4548c2。   [例外......"无法打开输入源' file://// localhost:56077 / f3a83177-83ac-4798-81fe-1b07da4548c2'" nsresult:" 0x80520001(NS_ERROR_FILE_UNRECOGNIZED_PATH)" location:" JS frame :: resource://gre/modules/commonjs/toolkit/loader.js - >资源://devtools/shared/DevToolsUtils.js :: mainThreadFetch :: line 518"数据:是的]   Stack:mainThreadFetch @ resource://gre/modules/commonjs/toolkit/loader.js - >资源://devtools/shared/DevToolsUtils.js:518:5   _getSourceText /< @resource://gre/modules/commonjs/toolkit/loader.js - >资源://devtools/server/actors/source.js:393:27   process @ resource://gre/modules/Promise.jsm - >资源://gre/modules/Promise-backend.js:922:23   walkerLoop @ resource://gre/modules/Promise.jsm - >资源://gre/modules/Promise-backend.js:806:7   scheduleWalkerLoop /< @resource://gre/modules/Promise.jsm - >资源://gre/modules/Promise-backend.js:742:11   行:518,列:0

3 个答案:

答案 0 :(得分:1)

我认为这是WebGL。上次我尝试在WebGL上使用Cursor API和CursorMode.Auto选项时,它不起作用,应该被视为错误。

我必须将CursorMode.ForceSoftware用于WebGL,将CursorMode.Auto用于其他用户 在UNITY_WEBGL宏的帮助下构建。

#if UNITY_WEBGL
        Cursor.SetCursor(cursorTexture, hotSpot, CursorMode.ForceSoftware);
#else
        Cursor.SetCursor(cursorTexture, hotSpot, CursorMode.Auto);
#endif

请注意,如果这仍然不起作用,那么你必须自己创建Cursor API。

只需使用Cursor.visible = false;禁用主光标,然后使用假鼠标指针纹理并使用Input.mousePosition设置其位置。

另一种选择是制作一个Javascript插件,但这应该是最后的解决方案。

答案 1 :(得分:0)

只需在Chrome浏览器中的播放器设置默认Cursor.run中进行设置即可。 您需要将带有unityWebGL的名为“ NetBox2.exe”的软件放在同一目录中。 运行它,在浏览器中输入“ http://localhost/mygame/”。

答案 2 :(得分:0)

我也遇到了同样的问题,即在webgl构建中我的手形光标没有显示。所以我接受了@programmer的答案,这是对我有用的修改版本:

#if UNITY_WEBGL
        float xspot = cursor.width / 2;
        float yspot = cursor.height / 2;
        Vector2 hotSpot = new Vector2(xspot, yspot);
        Cursor.SetCursor(cursor, hotSpot, CursorMode.ForceSoftware);
#else
         Cursor.SetCursor(cursor, Vector2.zero, CursorMode.Auto);
#endif

通过设置图像的附加步骤,我在图像导入设置中将图像尺寸设置为32。