字符串加载
字符串加载允许您从互联网下载文本文件并在 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 包含一个易于下载字符串的脚本:
- 在场景中创建一个新的 GameObject。
- 添加一个
UdonBehaviour组件。 - 选择
DownloadString作为程序源。 - 输入 URL 并选择要显示下载文本的文本组件。
为 LoadUrl 创建自己的脚本
您可以按照以下步骤使用 VRCStringDownloader.LoadUrl 函数在自己的脚本中下载字符串:
- 使用 URL 执行
VRCStringDownloader.LoadUrl并指定一个 UdonBehaviour。- 您可以在
VRC.SDK3.StringLoading命名空间中找到VRCStringDownloader。
- 您可以在
- 等待在指定的 UdonBehaviour 上调用
OnStringLoadSuccess或OnStringLoadError事件。 - 使用事件的
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}");
}
}