标签: unity-webgl

Unity WebGL - 防止 <Canvas> 吃掉所有鼠标/键盘输入?(HTML 输入字段)

统一 5.4

构建一个 Unity WebGL 应用程序(不是游戏)来处理 Unity 方面的所有 3D 内容,并且所有 UI 都是使用 HTML/CSS/JS 构建的。默认情况下,WebGLInput.captureAllKeyboardInput 设置为 true,这会导致任何需要键盘(文本)输入的输入字段被破坏,因为任何键盘控件都会被 Unity 自动占用而不是进入输入字段。正在做

#if !UNITY_EDITOR && UNITY_WEBGL
WebGLInput.captureAllKeyboardInput = false;
#endif
Run Code Online (Sandbox Code Playgroud)

修复了输入字段的问题,但导致统一忽略所有键盘输入,即使在元素被聚焦后,但添加

tabindex="1"
Run Code Online (Sandbox Code Playgroud)

修复它,以便 HTML 输入字段上的键盘输入在聚焦时工作,并且 Unity WebGL 应用程序内的键盘控件在聚焦时也工作。(这是所有文档:https : //docs.unity3d.com/ScriptReference/WebGLInput-captureAllKeyboardInput.html)。所以这一切正常。

但是,Unity WebGL 应用程序仍然会导致某些使用鼠标(而非键盘)控件的输入字段出现问题。也就是说,我在 input type="range" 字段(HTML5 滑块)和 input type="number (使用键盘输入数字有效,但鼠标上下点击无效)上注意到了它。

有什么解决方法可以解决这个问题吗?我基本上需要防止 Unity WebGL 画布不自动接受所有鼠标输入,除非首先单击/聚焦元素(就像键盘控件的工作方式一样)。在 Unity 方面有什么要改变的来解决这个问题吗?或者我是否需要编写一些自定义 JavaScript 来处理所有输入并确定它是用于 Unity 场景还是用于 HTML UI?

html input unity-game-engine unity-webgl

3
推荐指数
1
解决办法
4389
查看次数

Application.streamingAssetsPath 和 WebGL 构建

在我正在处理的项目中,StreamingAssets 目录中有两个 json 文件。处理它们的脚本在独立 PC 构建中完美运行,但在 WebGL 构建中根本不起作用。

我收到“找不到文件!” 根据脚本发送消息:

    else if (!File.Exists (filePath))
    {
        Debug.LogError ("Cannot find file!"); 
    }
Run Code Online (Sandbox Code Playgroud)

我得到了使用 WWW 类的答案,如 Unity Technologies 站点上的脚本 API 中所述,地址为:https ://docs.unity3d.com/ScriptReference/Application-streamingAssetsPath.html

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile");
    public string result = "";
    IEnumerator Example() {
        if (filePath.Contains("://")) {
            WWW www = new WWW(filePath);
            yield return www;
            result = www.text;
        } else
            result = System.IO.File.ReadAllText(filePath);
    }
}
Run Code Online (Sandbox Code Playgroud)

我很乐意这样做,但我在编码方面太新了,我需要一些解释。我现在的第一个问题是:该行中的“我的文件”字符串是什么

    public string filePath …
Run Code Online (Sandbox Code Playgroud)

c# json unity-game-engine unity-webgl

3
推荐指数
1
解决办法
1万
查看次数

用于网络游戏开发的react/redux和unity的集成

有没有办法在Web应用程序中集成统一与反应?甚至可能在子窗口中运行统一部分.

所以基本上我想使用图形和动画的统一部分.如果游戏中发生了一些有趣的事情,那么react/redux中的状态就会发生变化或触发某些动作.

如果我可以在游戏的统一部分中使用redux状态的某些部分,那将是理想的.因此,通过处理程序统一访问redux或某些部分.

非常感谢.我希望很清楚我想做什么.

unity-game-engine reactjs redux unity-webgl

3
推荐指数
1
解决办法
1034
查看次数

从位置找到GameObject上最近/最近的点?

我想找一个悬挂在起重机上的悬挂部分上的一点,它与起重机的距离最小,起重机臂上有BoxCollider撞击,我正在使用Physics.overlap方法.

如何从源对象中找到GameObject上最近的点?

[1]:https://i.stack.imgur.com/ZBRqm.png在此输入图像描述

c# unity-game-engine unity-webgl

3
推荐指数
1
解决办法
1714
查看次数

Unity WebGL 抛出错误:“ReferenceError:运行时未定义”

我想导出适用于 WebGL 的 Unity 项目(Unity 版本 2021.2),但出现以下错误:

\n
\n

在此页面上运行 Unity 内容时发生错误。有关详细信息,请参阅您的浏览器 JavaScript 控制台。错误是:\nReferenceError:未定义运行时 unityFramework/_WebSocketConnect/instance.ws.onopen@http://localhost:55444/Build/WEbGL.framework.js:3:67866

\n
\n

我正在使用这个 Websocket 包(https://github.com/endel/NativeWebSocket),并且在 Unity 或 Windows 构建中一切正常。当我运行 WebGL 构建时,它确实与 websocket 连接,但随后出现错误。\n错误消息显示更多信息在我的控制台中,但 F12 上的控制台仅重复该错误:

\n

未捕获的 ReferenceError: 未定义运行时\nat WebSocket.instance.ws.onmessage (WEbGL.framework.js:3)\ninstance.ws.onmessage @ WEbGL.framework.js:3 \n

\n
\n

为了给出一个最小的可重现示例,我刚刚使用 Unity 2021.2 创建了一个空的 3D Core 项目,并导入了 NativeWebSocket 包(我从 GitHub 下载了该文件并手动安装了它:

\n
\n

将NativeWebSocket/Assets/WebSocket中的源复制到您的 Assets 目录中

\n
\n

然后你必须通过 kentakang 在https://github.com/endel/NativeWebSocket/pull/54上发布修复程序,否则构建将失败。

\n

然后我使用下面的代码(也来自 Github 页面)创建了一个新的 C# 脚本,并将其放在场景中的相机上。我将其导出为 WebGL 并收到了上述错误。

\n

当调用方法 websocket.OnOpen/OnError/OnClose/OnMessage 之一时会发生这种情况,因此您\xc2\xb4t甚至不需要正在运行的 websocket,因为随后调用了 …

unity-game-engine websocket unity-webgl

3
推荐指数
1
解决办法
6461
查看次数

Unity3D - 将图像从PC内存上传到WebGL应用程序

我需要用户将他(她)的头像图片从PC上传到游戏

如何创建文件对话框并将图像上传到WebGL游戏?

javascript c# upload unity-game-engine unity-webgl

2
推荐指数
1
解决办法
4063
查看次数

从浏览器访问 Unity Webgl 输出,反之亦然

我收到了一个 Unity webgl 包,并将其放入 Wordpress 的课程中​​。Unity 生成的 index.html 可以在 iframe 中访问。这必须能够在访问课程时计算用户点击。

Unity开发者只说变量是Click,还有信息:

Application.ExternalCall("Send_Clicks", clickCount.ToString());
Run Code Online (Sandbox Code Playgroud)

我阅读了 Unity 文档,我应该创建一个 js 脚本来从 Unity 检索消息。如何从 Unity 检索消息?脚本应该放在哪里?

任何答案都非常感谢。谢谢你。

javascript c# wordpress unity-game-engine unity-webgl

2
推荐指数
1
解决办法
3473
查看次数

unity webgl 中带有数组参数的 SendMessage

Unity SendMessage只能传递一个参数,并且可以是一个数组。所以我正在调用 javascript 的 sendMessage 并调用 C# 方法(实际上是 webgl 方法)

var arr = [x,y,z];
gameInstance.SendMessage("Cube","SetGameObjectPosition",arr);
Run Code Online (Sandbox Code Playgroud)

但出现这个错误

由于以下原因调用错误处理程序

Uncaught 2,2,2 没有 SendMessage 支持的类型。[违规]“单击”处理程序花费了 8994 毫秒 blob:http://localhost/1ff50200-cb3a-4367-ab45-f02e9734fac2:2 Uncaught 2,2,2 没有 SendMessage 支持的类型。

SendMessage @ blob:http://localhost/1ff50200-cb3a-4367-ab45-f02e9734fac2:2

发送消息@UnityLoader.js:4

SetObjectPosition @(索引):44

onclick @(索引):65(索引):65

[违规]“点击”处理程序花费了 9000 毫秒

unity-game-engine unity-webgl

1
推荐指数
1
解决办法
8341
查看次数

WebGLInput.captureAllKeyboardInput 奇怪的行为。可以启用,但不能禁用

我遇到了 WebGLInput 的非常奇怪的行为。我有一个使用 WebGL Unity 构建的网站。默认情况下,WebGL 会捕获所有键盘输入。但是,我必须在 html 中使用输入字段。

所以首先我禁用 WebGLInput 并且它可以工作:

private void Start()
{
#if !UNITY_EDITOR && UNITY_WEBGL 
     WebGLInput.captureAllKeyboardInput = false;
#endif
}
Run Code Online (Sandbox Code Playgroud)

然后使用下面的函数向 unity 发送一条消息来切换键盘输入。它首先会启用它,但不会禁用它!

document.addEventListener('click', function(e) {
    if (e.target.id == "#canvas") {
        this.FocusCanvas("1");
    } else {
        this.FocusCanvas("0");
    }
}.bind(this), false);
Run Code Online (Sandbox Code Playgroud)

这是我用来切换 WebGLInput 的统一代码:

public void FocusCanvas(string focus)
{
    #if !UNITY_EDITOR && UNITY_WEBGL
        if (focus == "0") {
            WebGLInput.captureAllKeyboardInput = false;
        } else {
            WebGLInput.captureAllKeyboardInput = true;
        }
    #endif
}
Run Code Online (Sandbox Code Playgroud)

我尽可能地调试了它,并且我非常确定该方法已被触发并且所有内容都已执行。但禁用 captureAllKeyboardInput 不起作用。有人遇到过这样的问题吗?如果是这样,请告诉我我做错了什么?

javascript sendmessage unity-game-engine unity-webgl

1
推荐指数
1
解决办法
1503
查看次数

如何使用 UnityWebRequest post api 调用发布我的数据

这是我的 API 请求

public IEnumerator Login(string bodyJsonString)
{
    Debug.Log(bodyJsonString);

    UnityWebRequest req = UnityWebRequest.Post("localhost:3000/login", bodyJsonString);
    req.SetRequestHeader("content-type", "application/json");
    yield return req.SendWebRequest();
    if (req.isNetworkError || req.isHttpError)
    {
        Debug.Log(req.error);
    }
    else
    {
        Debug.Log("Form upload complete!");
    }

}
Run Code Online (Sandbox Code Playgroud)

它返回错误状态代码 500,并在服务器上返回错误 Unexpected token % in JSON atposition 0","severity

这是我的协程调用

public void submitLogin()
{

    _username = userInputField.GetComponent<InputField>().text;
    _password = passwordInputField.GetComponent<InputField>().text;

    Debug.Log("username" + _username);
    Debug.Log("password" + _password);

    string body = "{'username':'" + _username + "','password','" + _password + "'}";

    //API Call
    authChexi = new Auth();
    StartCoroutine(authChexi.Login(body));
}
Run Code Online (Sandbox Code Playgroud)

如果您对如何处理我的表单有任何想法,请告诉我。谢谢

c# json unity-game-engine unity-webgl unitywebrequest

1
推荐指数
1
解决办法
1万
查看次数