设置一个类的数组,以及如何将其链接到游戏对象

本文关键字:链接 对象 游戏 一个 数组 设置 | 更新日期: 2024-09-25 19:47:46

我对如何设置场景感到有点困惑。我想创建一个类System的数组。其中包含Vector3位置,该位置是对精灵渲染器和游戏对象的引用。在创建数组时,我还实例化了位于该位置的游戏对象。

我在我的游戏世界中的一个空游戏对象中设置了这样的数组:

public System[] systemArray;
void Start () {
    systemArray = new System[totalSystems];
    for (int i = 0; i < totalSystems; i++)
    {
        systemArray[i].worldPos = new Vector3(Random.Range(min,max),Random.Range(min,max), Random.Range(minZ,maxZ));
        Instantiate(systemObject,systemArray[i].worldPos,Quaternion.identity);
    }       
}

现在我的系统脚本是而不是附加到游戏对象,它只是一个将存储我刚刚创建的实例化游戏对象的数据的脚本。代码看起来是这样的:

public class System : MonoBehaviour {
   public SpriteRenderer  spriteRenderer;
   public GameObject      gameObject;
   public Vector3         worldPos;
}

我的困惑是如何将这一切联系起来。

这里的目标是,我希望能够销毁场景中的游戏对象,但我仍然能够访问它们的Vector3、系统中的GO和精灵渲染器,这样我就可以再次实例化。

我真的很困惑,所以我希望能得到一些帮助,帮助我如何有效地设置它。

设置一个类的数组,以及如何将其链接到游戏对象

创建一个单独的类,负责维护系统。对于最佳实践:该类不会直接公开系统集合,而是通过方法来使用逻辑修饰操作。

它看起来像这样:

public class SystemRepository
{
    private static List<System> _systems;
    public List<System> GetAll() { 
        if (_systems == null) {
          _systems = new List<System>()
        }
        // Further logic
        return _systems
    }
    public System GetBy(GameObject v) { ... }
    public void Add(List<System> s) { ... }
    public void DestroyBy(Vector3 v) { ... }
    ...
}

因此,当您需要访问系统以添加/删除/获取它们时,您可以执行以下操作:

using Namespace/Of/SystemRepository
// ...
var systemRepo = new SystemRepository();
systemRepo.Add(totalSystems);

还有其他地方。。

var systemRepo = new SystemRepository();
var allSystems = systemRepo.GetAll();
for (int i = 0; i < allSystems.Count(); i++)
{
    allSystems[i].worldPos = new Vector3(Random.Range(min, max), Random.Range(min, max), Random.Range(minZ, maxZ));
    Instantiate(systemObject, allSystems[i].worldPos, Quaternion.identity);
}

注意:在SystemRepository中,我声明系统列表是静态的,并且只有当它为null时才实例化它。这意味着它在你的游戏生命周期中只能实例化一次,这样无论你访问什么回购实例,你都能得到相同的数据。这样的事情通常会使用数据库来完成。