Unity3d 如何在脚本Unity中更改游戏对象属性?

Unity3d 如何在脚本Unity中更改游戏对象属性?,unity3d,gameobject,Unity3d,Gameobject,我正在尝试保存/加载我的游戏。在load方法中,每次我更改游戏对象的属性时,这些更改都会应用,然后很快就会恢复。这是我的密码: public void Load() { SceneManager.LoadScene(sceneID); List rootObjects=new List(); Scene-Scene=SceneManager.GetActiveScene(); 场景。GetRootGameObjects(rootObjects); int ncube=0,npick=0; for

我正在尝试保存/加载我的游戏。在load方法中,每次我更改游戏对象的属性时,这些更改都会应用,然后很快就会恢复。这是我的密码:

public void Load()
{
SceneManager.LoadScene(sceneID);
List rootObjects=new List();
Scene-Scene=SceneManager.GetActiveScene();
场景。GetRootGameObjects(rootObjects);
int ncube=0,npick=0;
for(int i=0;i
这些更改将应用于游戏对象,但会立即中止。我如何解决这个问题

包含这些代码行的脚本不是游戏对象的组件


编辑1:完成代码更新。

问题可能是
SceneManager.LoadScene
下一帧中完成。请参阅文档:

它说:

使用SceneManager.LoadScene时,不会进行加载 它立即在下一帧中完成。这是半异步的 行为可能会导致帧结巴,并且会因为负载而混淆 不会立即完成


在同一帧内更改值,因此加载场景完成时将覆盖这些值。Cou可以使用事件来防止这种行为:

问题可能是
SceneManager.LoadScene
下一帧中完成。请参阅文档:

它说:

使用SceneManager.LoadScene时,不会进行加载 它立即在下一帧中完成。这是半异步的 行为可能会导致帧结巴,并且会因为负载而混淆 不会立即完成


在同一帧内更改值,因此加载场景完成时将覆盖这些值。Cou可以使用事件来防止这种行为:

问题是我认为

Scene scene = SceneManager.GetActiveScene();
scene.GetRootGameObjects(rootObjects);
在场景完全加载之前从场景中获取对象,以便重置它们

使用SceneManager.LoadScene时,加载不会立即发生,而是在下一帧中完成。这种半异步行为会导致帧断断续续,并且会令人困惑,因为加载不会立即完成


我想你更应该像这样在那里使用和使用你的东西

public void Load()
{
    SceneManager.LoadScene(sceneID);
}
可能在场景中的一个额外组件中:

void OnEnable()
{
    SceneManager.sceneLoaded += OnSceneLoaded;
}

void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
    // your stuff here
}

void OnDisable()
{
    SceneManager.sceneLoaded -= OnSceneLoaded;
}

虽然我们不知道/不知道
player
cube[ncube]
等从何而来


对于在场景之间传输值,您应该开始使用

问题是我认为

Scene scene = SceneManager.GetActiveScene();
scene.GetRootGameObjects(rootObjects);
在场景完全加载之前从场景中获取对象,以便重置它们

使用SceneManager.LoadScene时,加载不会立即发生,而是在下一帧中完成。这种半异步行为会导致帧断断续续,并且会令人困惑,因为加载不会立即完成


我想你更应该像这样在那里使用和使用你的东西

public void Load()
{
    SceneManager.LoadScene(sceneID);
}
可能在场景中的一个额外组件中:

void OnEnable()
{
    SceneManager.sceneLoaded += OnSceneLoaded;
}

void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
    // your stuff here
}

void OnDisable()
{
    SceneManager.sceneLoaded -= OnSceneLoaded;
}

虽然我们不知道/不知道
player
cube[ncube]
等从何而来


对于在场景之间传输值,您应该开始使用

如果它不是一个组件,您如何称呼它?它是另一个对象的组件(不是我试图更改其属性的对象)。具体来说,这是我的加载按钮的一部分。如果用户单击“加载”按钮,将提示此脚本,并尝试加载属于活动场景的游戏对象的属性。是否有其他脚本访问这些属性?是的,这些游戏对象有自己的脚本用于控制。其中一个有一个刚体用于接收用户输入(滚动一个球)。这个加载按钮还能做什么?是否涉及场景更改?如果它不是一个组件,您如何称呼它?它是另一个对象的组件(不是我试图更改其属性的对象)。具体来说,这是我的加载按钮的一部分。如果用户单击“加载”按钮,将提示此脚本,并尝试加载属于活动场景的游戏对象的属性。是否有其他脚本访问这些属性?是的,这些游戏对象有自己的脚本用于控制。其中一个有一个刚体用于接收用户输入(滚动一个球)。这个加载按钮还能做什么?是否涉及场景变换?