【问题标题】:How to save and load the Scene and Gameobject in Unity3D如何在 Unity3D 中保存和加载场景和游戏对象
【发布时间】:2019-05-14 04:45:42
【问题描述】:

我有一个统一布线项目,我想保存玩家在场景中所做的所有修改。

我应该如何保存游戏?如何保存我的游戏对象?我需要序列化我的游戏对象,但我不知道该怎么做!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityStandardAssets.Characters.FirstPerson;

public class GameController : MonoBehaviour 
{    
    public Transform player;

    int i;

    void Start ()
    {
        i = 1; 
    }

    void Update () 
    {
        if (Input.GetKeyUp(KeyCode.Escape))     
        {   
            Pause(); 
        }

    if(player.GetComponent<FirstPersonController>().enabled == false) 
    {
        if (Input.GetKey (KeyCode.UpArrow))
        { 
            Debug.Log ("Up pressed");
            player.transform.position = new Vector3(player.transform.position.x,player.transform.position.y + 1.0f,player.transform.position.z); 
        } 
        else if (Input.GetKey (KeyCode.DownArrow))
        { 
            Debug.Log ("Down pressed");
            player.transform.position = new Vector3(player.transform.position.x,player.transform.position.y - 1.0f,player.transform.position.z); 
        }
    }
}

【问题讨论】:

标签: c# unity3d


【解决方案1】:

所以,我假设 - 在另一个脚本中 - 您将加载一个新场景,并且您想要维护附加了 GameController 脚本的对象。

在这种情况下,您可以使用DontDestroyOnLoad() 调用,简单的形式如下(只需将Awake() 函数添加到您的类中):

void Awake()
{
    DontDestroyOnLoad(this.gameObject);
}

这样,加载新场景时对象不会被销毁。

如果您想在游戏关闭时保存数据,以便之后加载它们,PlayerPrefs 就是答案。

【讨论】:

  • 没有其他方法可以保存游戏对象吗?
  • 这些是 Unity 提供的开箱即用的解决方案。可以创建自定义解决方案(例如使用数据库或 XML),但显然它们更复杂,因为您必须使用自己的代码。
  • 因为我使用了 DontDestroyOnLoad() 但它不起作用。当我退出游戏时,一切都像初始场景一样。我想保存我的游戏
  • 您的问题中没有这种方法。添加它可以帮助我们解决确切的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
相关资源
最近更新 更多