如何在生存类游戏中保存和加载环境?

How to save and load environment in a survival type game?

我正在开发一款生存类游戏,在这个游戏中,整个地图都是手动制作的,并分成多个 512x512 大小 chunks/terrains。根据玩家位置加载和卸载块。

我面临的问题是保存和加载块环境。游戏中玩家可以砍树也可以重新种树

考虑到不知道块中的位置和数量,我不能使用池系统,如果我在加载块时实例化所有树,我可能会调用数千个实例化调用,这会破坏性能。

我应该如何处理这个问题,有什么好的解决方案吗?谢谢

那好吧,我刚刚找到了解决办法。 可寻址。使用 Addressables.LoadAssetAsync and Addressables.InstantiateAsync.

我做了一个简单的测试,我创建了 5000 个复杂的网格并得到了零延迟。非常难以置信。

这是代码,如果有人感兴趣的话。

using System.Collections;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

using SystemRan = System.Random;

public class Massinstantiation : MonoBehaviour
{
    const string location = "Assets/TestObject.prefab";

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            StartCoroutine(Instantiate());
        }
    }

    public IEnumerator Instantiate()
    {
        var loadAsset = Addressables.LoadAssetAsync<GameObject>(location);

        yield return loadAsset;

        if (loadAsset.Status == AsyncOperationStatus.Succeeded)
        {
            SystemRan rand = new SystemRan();
            for (int i = 0; i < 5000; i++)
            {
                var obj = Addressables.InstantiateAsync(location, new Vector3(rand.Next(-250, 250), 0, rand.Next(-250, 250)), Quaternion.identity, null);
                yield return obj.IsDone;
            }
        }
    }
}