首页 > 解决方案 > 如何在包含该类的对象的类中创建静态数组或列表 c#

问题描述

我在网上找不到任何东西,所以如果这个问题太基本,我很抱歉。

我想创建一个包含该类所有对象的静态列表的类。

这些方面的东西:

public class PlanetSpawner : MonoBehaviour
{
    public static List<PlanetSpawner> planetList = new List<PlanetSpawner>();

    public PlanetSpawner(Vector3 aStartingCoord, GameObject planet)
    {
        GameObject.Instantiate(planet,aStartingCoord,new Quaternion(0,0,0,0));
        planet.transform.position = aStartingCoord;

        planetList.Add(object that called the constructor);
    }
 
}

此代码用于统一脚本,对象是在另一个方法(和类)中创建的:

public GameObject planetPrefab;
// Start is called before the first frame update
void Start()
{
    PlanetSpawner testPlanet = new PlanetSpawner(new Vector3(1, 1, 1), planetPrefab);
}

我知道我可以这样做:

public GameObject planet;
// Start is called before the first frame update
void Start()
{
    PlanetSpawner testPlanet = new PlanetSpawner(new Vector3(1, 1, 1), planet);
    PlanetSpawner.planetList.Add(testPlanet);
}

并修改构造函数:

public class PlanetSpawner : MonoBehaviour
{
    public static List<PlanetSpawner> planetList = new List<PlanetSpawner>();

    public PlanetSpawner(Vector3 aStartingCoord, GameObject planet)
    {
        GameObject.Instantiate(planet,aStartingCoord,new Quaternion(0,0,0,0));
        planet.transform.position = aStartingCoord;
    }

 
}

但我相信我想做的方式更干净,更容易使用

标签: c#listclassobjectstatic

解决方案


您可以只使用this来引用当前对象:

public class PlanetSpawner : MonoBehaviour
{
    public static List<PlanetSpawner> planetList = new List<PlanetSpawner>();

    public PlanetSpawner(Vector3 aStartingCoord, GameObject planet)
    {
        GameObject.Instantiate(planet,aStartingCoord,new Quaternion(0,0,0,0));
        planet.transform.position = aStartingCoord;

        planetList.Add(this);
    }
 
}

推荐阅读