在 VRChat SDK 和 UdonSharp 中,DataList
和 DataDictionary
是两种用于存储和操作数据的集合类型,类似于传统编程语言中的数组和字典。
DataList
DataList
是一个动态数组,类似于 C# 中的 List
,用于存储一组有序的数据项。你可以向 DataList
中添加、移除和访问数据项。
特性
- 动态大小:可以根据需要添加或移除元素。
- 有序:元素按照添加的顺序排列,可以通过索引访问。
常用方法
Add(DataToken value)
:向列表添加一个元素。RemoveAt(int index)
:移除指定索引的元素。Clear()
:清空列表中的所有元素。Count
:获取列表中的元素数量。Get(int index)
:获取指定索引的元素。
DataDictionary
DataDictionary
是一个键值对集合,类似于 C# 中的 Dictionary
,用于存储一组无序的键值对数据项。
特性
- 键值对存储:每个元素包含一个键和一个值。
- 键唯一:每个键在字典中是唯一的。
常用方法
Add(string key, DataToken value)
:向字典添加一个键值对。Remove(string key)
:移除指定键的键值对。Clear()
:清空字典中的所有键值对。ContainsKey(string key)
:检查字典是否包含指定的键。Get(string key)
:获取指定键的值。
示例代码
以下是如何在 UdonSharp 中使用 DataList
和 DataDictionary
的示例。
使用 DataList
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
using VRC.SDK3.Data;
public class DataListExample : UdonSharpBehaviour
{
private VRCDataList dataList = new VRCDataList();
private void Start()
{
// 添加元素
dataList.Add("Player1");
dataList.Add("Player2");
// 获取元素数量
int count = dataList.Count;
Debug.Log($"DataList Count: {count}");
// 访问元素
string firstPlayer = dataList.Get(0).StringValue;
Debug.Log($"First Player: {firstPlayer}");
// 移除元素
dataList.RemoveAt(0);
Debug.Log($"DataList Count after removal: {dataList.Count}");
}
}
使用 DataDictionary
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
using VRC.SDK3.Data;
public class DataDictionaryExample : UdonSharpBehaviour
{
private VRCDataDictionary dataDictionary = new VRCDataDictionary();
private void Start()
{
// 添加键值对
dataDictionary.Add("Player1", "Score1");
dataDictionary.Add("Player2", "Score2");
// 检查键是否存在
bool hasPlayer1 = dataDictionary.ContainsKey("Player1");
Debug.Log($"Has Player1: {hasPlayer1}");
// 获取值
string player1Score = dataDictionary.Get("Player1").StringValue;
Debug.Log($"Player1 Score: {player1Score}");
// 移除键值对
dataDictionary.Remove("Player1");
Debug.Log($"Has Player1 after removal: {dataDictionary.ContainsKey("Player1")}");
}
}
选择使用 DataList 还是 DataDictionary
- DataList:适用于需要有序存储和按索引访问的数据集合,例如参与者列表。
- DataDictionary:适用于需要根据键快速查找数据的场景,例如存储玩家的分数或属性。
根据你的具体需求选择合适的数据结构。如果你有更多问题或需要进一步的帮助,请告诉我。