Skip to main content

字符串加载

字符串加载允许您从互联网下载文本文件并在 VRChat 世界中使用的。您可以使用 SDK 中包含的 DownloadString 脚本,也可以使用新的 VRCStringDownloader.LoadUrl 函数制作自己的脚本。

  • 文本文件可以是任何格式,例如 .txt 或 .json。
  • 每五秒只能下载一个字符串。 如果超过此限制,字符串下载将排队并按随机顺序下载。
  • 单个字符串最大为 100MB
  • 队列中最多 1000 个元素

可信 URL​

如果站点不在列表中,除非用户在设置中启用了"允许不受信任的 URL",否则不会下载。

以下 URL 可用:

  • Disbridge (*.disbridge.com)
  • GitHub (*.github.io)
  • Github Gist (gist.githubusercontent.com)
  • Pastebin (pastebin.com)
  • VRCDN (*.vrcdn.cloud)

指南​

有几种方法可以在世界中使用字符串加载。

使用 DownloadString 脚本下载字符串​

SDK 包含一个易于下载字符串的脚本:

  1. 在场景中创建一个新的 GameObject。
  2. 添加一个 UdonBehaviour 组件。
  3. 选择 DownloadString 作为程序源。
  4. 输入 URL 并选择要显示下载文本的文本组件。

为 LoadUrl 创建自己的脚本​

您可以按照以下步骤使用 VRCStringDownloader.LoadUrl 函数在自己的脚本中下载字符串:

  1. 使用 URL 执行 VRCStringDownloader.LoadUrl 并指定一个 UdonBehaviour。
    • 您可以在 VRC.SDK3.StringLoading 命名空间中找到 VRCStringDownloader。
  2. 等待在指定的 UdonBehaviour 上调用 OnStringLoadSuccess 或 OnStringLoadError 事件。
  3. 使用事件的 IVRCStringDownload 获取字符串下载的 Result。

新事件​

OnStringLoadSuccess​

返回 IVRCStringDownload。当 LoadUrl 函数成功从互联网下载字符串时调用。

OnStringLoadError​

返回 IVRCStringDownload。当 LoadUrl 函数下载字符串失败时调用。

新类型​

VRCStringDownloader​

使用此静态类从网络下载字符串。

VRCStringDownloader.LoadUrl​

  • Url:要从互联网加载的 URL。
  • UdonBehaviour:要向其发送事件的 UdonBehaviour。
    • 在 Udon Graph 中,默认为当前 UdonBehaviour
    • 在 Udon Sharp 中,您可以使用 this

IVRCStringDownload​

字符串加载事件的结果。

  • Get Error (string): OnStringLoadError 的错误消息。
  • Get ErrorCode (int): OnStringLoadError 的 HTTP 错误码。
  • Get ResultBytes (byte[]): 作为字节数组下载的原始数据。您可以使用 System.Text.Encoding 对此进行解码以获取自定义格式的字符串。访问此属性将返回数据的副本。
  • Get Result (string): 下载的字符串,通过 UTF8 标准解码。
  • Get UdonBehaviour (UdonBehaviour): 事件发送到的 UdonBehaviour。
  • Get Url (VRCUrl): 获取尝试下载的 URL。

示例代码​

字符串下载示例,自定义文本编码
using System.Text;
using UdonSharp;
using UnityEngine;
using VRC.SDK3.StringLoading;
using VRC.SDKBase;

public class ResultBytesExample : UdonSharpBehaviour
{
[SerializeField]
private VRCUrl url;

void Start()
{
VRCStringDownloader.LoadUrl(url, this);
}

public override void OnStringLoadSuccess(IVRCStringDownload result)
{
string resultAsUTF8 = result.Result;
byte[] resultAsBytes = result.ResultBytes;
string resultAsASCII = Encoding.ASCII.GetString(resultAsBytes);
Debug.Log($"UTF8: {resultAsUTF8}");
Debug.Log($"ASCII: {resultAsASCII}");
}

public override void OnStringLoadError(IVRCStringDownload result)
{
Debug.LogError($"Error loading string: {result.ErrorCode} - {result.Error}");
}
}