【发布时间】:2016-04-03 18:26:12
【问题描述】:
Picture of Error我从菜单场景转到游戏场景之后。
我试图在从菜单转换到游戏场景时加载玩家的位置,但我收到一个错误消息,提示我的变量 player 为空。我在 start 和 update 函数中打印了我的变量 player 的值,他们都说 player 有一个值,但是当我尝试从 Game 场景的 loadPosition 函数中访问它时,它给了我一个错误,说那个 player一片空白。经过几个小时的思考,我觉得变量 player 为空的原因是因为我是从 Menu 场景而不是 Game 场景调用 toWorld() 。在我之前有没有办法从不同的场景调用 start 函数过渡到游戏场景。这个错误一直让我发疯!为了便于阅读,我删除了代码中不相关的部分。顺便说一下,Demo是我的游戏场景。提前谢谢!
GameObject player;
void Update(){
if (Application.loadedLevelName == "Demo") {
savePosition ();
print(player);
}
}
void Start () {
if (Application.loadedLevelName == "Demo"){
player = GameObject.FindWithTag ("Player");
print (player);
}
}
public void loadPosition(){
float playerX = PlayerPrefs.GetFloat ("PlayerX");
float playerY = PlayerPrefs.GetFloat ("PlayerY");
float playerZ = PlayerPrefs.GetFloat ("PlayerZ");
player.transform.position = new Vector3 (playerX, playerY, playerZ);
}
public void savePosition(){
PlayerPrefs.SetFloat ("PlayerX", player.transform.position.x);
PlayerPrefs.SetFloat ("PlayerY", player.transform.position.y);
PlayerPrefs.SetFloat ("PlayerZ", player.transform.position.z);
float playerX = PlayerPrefs.GetFloat ("PlayerX");
float playerY = PlayerPrefs.GetFloat ("PlayerY");
float playerZ = PlayerPrefs.GetFloat ("PlayerZ");
print (new Vector3 (playerX, playerY, playerZ));
}
【问题讨论】:
-
我认为包含一个
OnLevelWasLoaded函数来查找播放器应该可以工作。 -
@GunnarB。我尝试在 OnLevelWasLoaded 函数中使用 GameObject.FindWithTag("Player") ,但 Unity 仍然给我错误。 ://
-
为了调试,将播放器设为公众并在运行时查看检查器。
-
@GunnarB。 player 变量是在运行时分配的。该函数由于某种原因无法访问它。
标签: c# function debugging variables unity3d