【Unity&C#&数组】如何创建一个存放任何类型变量的数组

这篇博客介绍了在Unity中如何使用ArrayList、对象数组和List<T>来存储不同类型的变量。通过示例展示了ArrayList的添加元素、显示元素的功能,并讨论了直接修改ArrayList成员变量值的效果。同时,提到了Unity3D中支持的数组类型和C#中ArrayList、数组及List<T>的区别。

如果有很多同等类型的 Int 类型(其他任何类型都可以)的 变量,想统一的对其进行操作怎么办

-------------------------------------------------------------------------------

1. ArrayList 的用法参考资料1

举个栗子


//声明
    private int Num_1 = 1;
    private int Num_2 = 2;
    private int Num_3 = 3;
    private int Num_4 = 4;
    private int Num_5 = 5;

private ArrayList List = new ArrayList(5);//ArrayList 默认是4个长度,使用之前记得 给予一个长度


    // Use this for initialization初始化
    void Start () {
        List.Add(Num_1);
        List.Add(Num_2);
        List.Add(Num_3);
        List.Add(Num_4);
        List.Add(Num_5);

ShowList();

<think>我们正在Unity中声明一个存放字符串的数组。根据用户的问题和之前的引用,我们可以使用以下几种方式: 1. 使用string[]数组:这是最直接的方式,类似于引用[2]中提到的int数组,但将类型改为string。 2. 使用List<string>:如果需要一个动态大小的集合,可以使用List,如引用[2]中提到的容器。 下面分别给出示例: ### 方法1:声明固定大小的字符串数组 ```csharp using UnityEngine; public class StringArrayExample : MonoBehaviour { // 声明一个固定大小的字符串数组 public string[] myStringArray = new string[5]; void Start() { // 初始化数组元素 myStringArray[0] = "Hello"; myStringArray[1] = "World"; myStringArray[2] = "Unity"; // 也可以使用循环来初始化 // 遍历打印 foreach (string str in myStringArray) { Debug.Log(str); } } } ``` ### 方法2:声明动态的字符串列表(List<string>) 如果需要动态增减元素,可以使用List: ```csharp using UnityEngine; using System.Collections.Generic; // 需要引入此命名空间以使用List public class StringListExample : MonoBehaviour { // 声明一个字符串列表 public List<string> myStringList = new List<string>(); void Start() { // 添加元素 myStringList.Add("Unity"); myStringList.Add("C#"); myStringList.Add("Array"); // 遍历打印 foreach (string str in myStringList) { Debug.Log(str); } } } ``` ### 注意事项: 1. Unity的序列化系统支持数组和List,因此可以在Inspector窗口中直接编辑。 2. 在Inspector中,数组和List会以可展开的列表形式显示,方便直接赋值。 例如,在Inspector中,你可以看到`myStringArray`和`myStringList`,点击展开后可以为每个元素赋值。 ### 初始化方式补充: 也可以在声明时直接初始化数组: ```csharp public string[] predefinedArray = new string[] { "One", "Two", "Three" }; // 或者简写 public string[] predefinedArray2 = { "One", "Two", "Three" }; ``` 对于List,声明时初始化: ```csharp public List<string> predefinedList = new List<string>() { "A", "B", "C" }; ``` 根据引用[3],我们也可以使用字符串数组来构建字符串,但注意字符串数组本身就是一个字符串的集合。 以上方法都可以在Unity中使用,根据需求选择数组(固定大小)或列表(动态大小)。 §§相关问题§§ 1. Unity数组和List在性能上有什么区别? 2. 如何在Unity Inspector中编辑数组和List? 3. 如何将字符串数组转换为单个字符串? 4. Unity中如何序列化自定义类型数组? </think>在 Unity 中声明存放字符串的数组有以下几种常用方法: ### 方法一:声明固定大小的字符串数组 ```csharp using UnityEngine; public class StringArrayExample : MonoBehaviour { // 声明固定大小的字符串数组 public string[] myStringArray = new string[5]; // 创建包含5个元素数组 void Start() { // 初始化数组元素 myStringArray[0] = "Unity"; myStringArray[1] = "C#"; myStringArray[2] = "Game Development"; // 遍历打印数组内容 foreach(string str in myStringArray) { if(!string.IsNullOrEmpty(str)) Debug.Log(str); } } } ``` **特点**: - 大小固定(本例为5个元素) - 可在 Inspector 中直接编辑 - 使用索引访问元素(如 `myStringArray[0]`) - 适合已知元素数量的场景[^2] ### 方法二:声明动态大小的字符串列表 ```csharp using UnityEngine; using System.Collections.Generic; // 需要引入List的命名空间 public class StringListExample : MonoBehaviour { // 声明动态字符串列表 public List<string> myStringList = new List<string>(); void Start() { // 动态添加元素 myStringList.Add("Dynamic"); myStringList.Add("Size"); myStringList.Add("Collection"); // 访问元素 Debug.Log("第一个元素: " + myStringList[0]); // 删除元素 myStringList.RemoveAt(1); // 删除索引1的元素 } } ``` **特点**: - 动态大小(自动扩容) - 提供添加/删除方法(`Add()`, `RemoveAt()`) - 同样支持 Inspector 编辑 - 适合元素数量不确定的场景[^2] ### 方法三:声明时直接初始化 ```csharp // 数组直接初始化 private string[] directArray = { "Apple", "Banana", "Cherry" }; // 列表直接初始化 private List<string> directList = new List<string> { "Red", "Green", "Blue" }; ``` ### 使用建议: 1. **固定大小数组**:当元素数量已知且不变时(如关卡名称列表) 2. **动态列表**:当需要动态增删元素时(如玩家收集的物品名称) 3. **Inspector 编辑**:声明为 `public` 变量可在 Unity 编辑器可视化操作 4. **空值检查**:使用 `string.IsNullOrEmpty()` 避免空引用错误 ### 实际应用示例 ```csharp using UnityEngine; using System.Collections.Generic; public class DialogueSystem : MonoBehaviour { [SerializeField] private string[] npcGreetings = { "Hello traveler!", "Nice weather today", "Have you seen my cat?" }; private List<string> playerResponses = new List<string>(); void Start() { // 添加玩家响应选项 playerResponses.Add("Tell me more"); playerResponses.Add("I need to go"); playerResponses.Add("Where can I find supplies?"); // 随机选择NPC问候语 int randomIndex = Random.Range(0, npcGreetings.Length); Debug.Log(npcGreetings[randomIndex]); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值