设置一个类的数组,以及如何将其链接到游戏对象
本文关键字:链接 对象 游戏 一个 数组 设置 | 更新日期: 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时才实例化它。这意味着它在你的游戏生命周期中只能实例化一次,这样无论你访问什么回购实例,你都能得到相同的数据。这样的事情通常会使用数据库来完成。