【问题标题】:how to sync data in collection with List<GameObject> in Unity?如何将集合中的数据与 Unity 中的 List<GameObject> 同步?
【发布时间】:2020-08-09 22:38:53
【问题描述】:

假设我有一个来自网络的数据集合,网络每帧发送这些数据:

public class Unit {
    public float PosX;
    public float PosY;
    public float Health;
}

public Unit[] DataFromNetwork;

我想转换成这个:

public class MonoUnit : MonoBehaviour {
    public Transform t;  // from Transform
    public float health
}

如何每帧将 DataFromNetwork 转换为 Gameobjects?

我可以这样想:
- 销毁所有 GameObject 并根据 DataFromNetwork 每帧对其进行实例化。
但我认为这不是一个好主意,因为 GameObject 应该是长寿的。

【问题讨论】:

    标签: c# arrays unity3d collections


    【解决方案1】:

    我认为最好在DataFromNetwork 中为您的Unit 添加一个唯一的id,并在每个单元的Instatiate 的第一次调用中,将此id 分配给您的单元。
    在下一个收到的包裹中,通过id在游戏中找到您的单位并将您的新数据分配给它。

    【讨论】:

    • 您好,谢谢您的回答,如果下一帧的 DataFromNetwork 的 Unit 比前一帧多/少怎么办
    • 没关系!因为你一一读取DataFromNetwork,搜索这个列表中存在的id。
    • 顺便说一句,如果您的意思是如果 DataFromNetwork 数组中不存在某个 Unit 时要删除它,或者如果它是一个新单元则要实例化,您可以通过 Boolean 来完成DataFromNetwork 和 MonoUnit 上的标志。
    • 是的,某些单元可能已经从 DataFromNetwork 中删除,这会使某些 MonoUnit 不同步,因此需要销毁。 DataFromNetwork 也可以有更多单元,这个可以用你的答案来解决(实例化并分配 id 来更新)。布尔标志应该在 monounit 或 DataFromNetwork 上?
    • 更改您更新的每个单位的标志(以单体为单位),完成后,销毁任何具有错误标志的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多