我的播放器的状态如何不会在每次屏幕加载时重置?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的播放器的状态如何不会在每次屏幕加载时重置?相关的知识,希望对你有一定的参考价值。
摘要重新开始游戏或进入下一个级别时,我的玩家的生活并没有重置为默认值。当我死一次,然后完成第一个级别。第二级加载,我从两个生命开始。当我死亡3次时,它将加载主菜单,而当我单击开始按钮时,它将以1点生命开始。
LayOut:Unity Hierarchy LayOut
目标:
重新/开始游戏/下一个关卡时,要让玩家的生命重置为3。
预期结果:
[玩家完成剩下2条生命的关卡。下一级应该加载,显示玩家有3条生命。
实际结果:
[玩家完成剩下2条生命的关卡。下一级显示玩家有2条生命而不是3条生命。
错误消息:无
我尝试了什么我迷路了,这是我第一次创建游戏。玩家有多个生命的地方。
SpaceShip CODE:
public void completeSequence()
player = playerState.Transcending;
SFX.Stop();
SFX.PlayOneShot(completed);
death.Stop();
victory.Play();
Invoke("loadNextLevel", lvlLoadDelay);
public void resetLvl()
//print("Dead");
player = playerState.Dying;
SFX.Stop();
SFX.PlayOneShot(dead);
death.Play();
Invoke("loadCurrentSccene", lvlLoadDelay);
public void deadSequence()
//print("Dead");
player = playerState.Dying;
SFX.Stop();
SFX.PlayOneShot(dead);
death.Play();
Invoke("loadMainLevel", lvlLoadDelay);
public void loadCurrentSccene()
var currentScene = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentScene);
public void loadMainLevel()
SceneManager.LoadScene(0);
public void loadNextLevel()
int currentScene = SceneManager.GetActiveScene().buildIndex;
//print(currentScene);
int nextScene = currentScene +1;
SceneManager.LoadScene(nextScene);
public void loadPreviousLevel()
int currentScene = SceneManager.GetActiveScene().buildIndex;
int nextScene = currentScene -1;
SceneManager.LoadScene(nextScene);
GameSession代码:
[SerializeField] int playerLives = 3;
[SerializeField] Text livesText;
private void Awake()
int numSessions = FindObjectsOfType<gameSession>().Length;
if (numSessions > 1)
Debug.Log("I am the NOT Original");
Destroy(gameObject);
else
Debug.Log("I am the Original");
DontDestroyOnLoad(gameObject);
// Start is called before the first frame update
void Start()
livesText.text = playerLives.ToString();
public void initiateDeath()
if (playerLives > 1)
reduceLives();
else
FindObjectOfType<spaceShip>().deadSequence();
public void reduceLives()
playerLives--;
FindObjectOfType<spaceShip>().resetLvl();
livesText.text = playerLives.ToString();
答案
当前,playerLives
正在初始化为3
,并且每当调用reduceLives()
时将其减小1。您的代码均未将playerLives
设置回3
,因此,当您输入新级别或调用deadSequence()
时,生命将保持其先前的值。
向GameSession添加一个重置方法,并且每当您想要将playerLives
设置回3
时都调用此方法(因此大概在deadSequence()
和completeSequence()
的内部)将解决此问题。
public void ResetLives()
playerLives = 3;
livesText.text = playerLives.ToString();
以上是关于我的播放器的状态如何不会在每次屏幕加载时重置?的主要内容,如果未能解决你的问题,请参考以下文章