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

如何获取List中被点击GameObject的索引?

获取点击对象在List中的索引解决方案

嘿,我来给你解决这个问题!你要在点击实例化的GameObject时获取它在List里的索引,有两个实用的办法,看你需求选:

方法1:用List内置的IndexOf方法

这是最直接的方式,利用List自带的IndexOf方法查找当前对象在列表中的位置。不过要注意,这个方法会遍历列表查找元素,所以如果列表特别大、频繁调用的话性能会稍差,但你的场景是10个对象,完全没问题。

首先,确保你的ObjectA脚本能访问到那个静态的myObjects列表(假设包含这个列表的脚本类叫Spawner,记得替换成你实际的类名):

// ObjectA脚本中的OnMouseDown方法
void OnMouseDown()
{
    // 调用Spawner类的静态列表,查找当前对象的索引
    int objectIndex = Spawner.myObjects.IndexOf(gameObject);
    
    // 做个判断,防止对象不在列表中的情况(比如被移除或销毁)
    if (objectIndex != -1)
    {
        Debug.Log($"点击的对象在列表中的索引是: {objectIndex}");
    }
    else
    {
        Debug.LogWarning("这个对象不在myObjects列表里哦!");
    }
}

方法2:实例化时直接存储索引(性能更优)

如果担心性能,或者需要更直接的访问方式,可以在每个实例化的对象上提前存好它的索引。这种方式是O(1)的访问速度,不用遍历列表。

第一步,给ObjectA脚本加一个用来存储索引的字段:

// ObjectA脚本
public int objectIndex; // 存储当前对象在列表中的索引

void OnMouseDown()
{
    Debug.Log($"点击的对象在列表中的索引是: {objectIndex}");
}

第二步,在实例化对象的时候,把循环的索引值赋值给这个字段:

// 包含myObjects列表的脚本中的Start方法
public static List<GameObject> myObjects = new List<GameObject>();
public GameObject ObjectA; // 预制体

void Start()
{
    for (int i = 0; i < 10; i++)
    {
        GameObject ObjectACopy = Instantiate(ObjectA);
        // 获取ObjectA组件,赋值当前循环的索引
        ObjectACopy.GetComponent<ObjectA>().objectIndex = i;
        myObjects.Add(ObjectACopy);
    }
}

两种方法的小提示

  • 方法1适合简单场景,不用额外维护字段,但要注意对象是否还在列表中(返回-1表示不在)。
  • 方法2性能更好,但如果后续你对列表做了移除、排序等操作,存储的索引就会和实际列表位置不匹配了,这种场景下要谨慎使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:11:46