You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity C#:如何在数组单个元素中存储多种类型数据

解决不同类型数据存入数组单个元素的方案

在Unity中,要把GameObject、int这类不同类型的数据打包进数组的单个元素,核心思路是把这些数据封装成一个统一的类型,以下是几种常用的实现方式:

1. 自定义可序列化类/结构体(最常用,支持编辑器可视化编辑)

通过自定义带序列化标记的类或结构体,将不同类型的字段打包成一个单元,再用数组存储这个单元的实例。

示例代码:

using UnityEngine;

// 必须添加该特性,让Unity识别并支持编辑器序列化
[System.Serializable]
public struct EnemySpawnInfo
{
    public GameObject enemyPrefab; // 存储预制体
    public int spawnCount;         // 存储生成数量
    // 可根据需求添加更多字段,比如float spawnDelay、Vector3 spawnPosition等
}

// 在你的脚本中声明数组
public class EnemySpawner : MonoBehaviour
{
    public EnemySpawnInfo[] spawnSettings; // 数组的每个元素都会包含GameObject和int数据
}

添加[System.Serializable]后,你可以直接在Unity Inspector面板中给数组的每个元素赋值,运行时数据也会被正常序列化保存。

2. 使用ScriptableObject(适合跨场景/跨脚本复用配置)

如果这套数据需要在多个脚本或场景中重复使用,推荐用ScriptableObject,它相当于独立的配置文件,能实现数据与逻辑的分离。

示例代码:

using UnityEngine;

// 添加该特性,允许在Project窗口右键创建配置实例
[CreateAssetMenu(fileName = "EnemyConfig", menuName = "GameConfigs/Enemy Spawn Config")]
public class EnemyConfig : ScriptableObject
{
    public GameObject enemyPrefab;
    public int spawnCount;
}

// 在脚本中声明数组
public class EnemySpawner : MonoBehaviour
{
    public EnemyConfig[] enemyConfigs;
}

使用时,在Project窗口右键选择GameConfigs/Enemy Spawn Config创建配置实例,给每个实例赋值后,直接拖入数组即可。这种方式方便统一管理和复用配置。

3. 使用ValueTuple(适合纯代码临时数据存储)

如果只是在代码逻辑中临时使用,不需要在编辑器面板中编辑,可以用C#的ValueTuple快速打包数据:

示例代码:

// 声明并初始化数组
var enemyDataArray = new (GameObject, int)[]
{
    (EnemyPrefab1, 5),
    (EnemyPrefab2, 3)
};

// 遍历访问数据
foreach (var data in enemyDataArray)
{
    GameObject targetPrefab = data.Item1;
    int targetCount = data.Item2;
    // 执行你的生成逻辑
}

注意:这种方式的数据无法在Unity Inspector中显示或编辑,仅适用于纯代码层面的临时数据处理。

内容的提问来源于stack exchange,提问作者frob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:06:25