我有一個有效的檢查點系統,它保存坐標,但是當玩家通過關卡或場景時,下一個場景會在與上一關卡相同的位置加載。
我試著做一個
PlayerPrefs.DeleteAll();
但我有一個場景選單,每次你完成一個關卡時都會解鎖場景,這會PlayerPrefs.DeleteAll();洗掉整個通過關卡的串列。
如何洗掉下一個場景的檢查點資訊以加載到正確的位置。
此腳本位于播放器腳本中:
private void Start()
{
Rigidbody2D = GetComponent<Rigidbody2D>();
Animator = GetComponent<Animator>();
Advertisement.Initialize(gameId);
if (PlayerPrefs.GetFloat("checkpointX") != 0)
{
transform.position=(new Vector2(PlayerPrefs.GetFloat("checkpointX"), PlayerPrefs.GetFloat("checkpointY")));
}
}
public void recheadCheckPoint(float x, float y)
{
PlayerPrefs.SetFloat ("checkpointX",x);
PlayerPrefs.SetFloat ("checkpointY",y);
}
所以,然后它將資訊帶到 CheckPointScript:
public class CheckPoint : MonoBehaviour
{
private Animator Animator;
public AudioClip Cat;
private void Start()
{
Animator = GetComponent<Animator>();
}
private void OnTriggerEnter2D(Collider2D collision)
{
DixonMovement Dixon = collision.GetComponent<DixonMovement>();
CheckPoint checkpoint = collision.GetComponent<CheckPoint>();
if (Dixon != null)
{
collision.GetComponent<DixonMovement>().recheadCheckPoint(transform.position.x, transform.position.y);
Animator.SetTrigger("Duerme");
Camera.main.GetComponent<AudioSource>().PlayOneShot(Cat);
}
if (checkpoint != null)
{
collision.GetComponent<DixonMovement>().recheadCheckPoint(transform.position.x, transform.position.y);
Animator.SetTrigger("Duerme");
Camera.main.GetComponent<AudioSource>().PlayOneShot(Cat);
}
}
然后我有場景控制器,允許玩家加載新的解鎖關卡。
public void levelToLoad(int level)
{
SceneManager.LoadScene(level);
}
如何在不影響其他 PlayerPref 的情況下洗掉 recheadCheckPoint(float x, float y) 以開始新關卡?
uj5u.com熱心網友回復:
我有一個有效的檢查點系統,它保存坐標,但是當玩家通過關卡或場景時,下一個場景會在與上一關卡相同的位置加載。
除了洗掉檢查點資料,您還可以保存檢查點所在級別的ID。然后在加載下一個級別時,您可以檢查檢查點是否位于當前級別,如果不是,則將其替換為當前級別的開始檢查點。
或者,您可以保存檢查點 id并通過查找匹配的檢查點并從中獲取起始位置或在未找到時使用默認位置來確定生成位置,而不是位置。
此外,如果到達檢查點會保存玩家的當前位置,而不是由檢查點確定的位置,則根據游戲,玩家可能會從不利位置開始。IE 玩家立即被敵人射擊或發現的位置。
uj5u.com熱心網友回復:
我想你正在尋找的是 PlayerPrefs.DeleteKey
public static void ResetCheckpoint()
{
PlayerPrefs.DeleteKey("checkpointX");
PlayerPrefs.DeleteKey("checkpointY");
}
順便說一句,對于您的加載,您目前獲得了兩次價值!相反,你寧愿使用PlayerPrefs.HasKey
if (PlayerPrefs.HasKey("checkpointX"))
{
transform.position = new Vector2(PlayerPrefs.GetFloat("checkpointX"), PlayerPrefs.GetFloat("checkpointY"));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329228.html
上一篇:統一。有沒有辦法將List中的物件鏈接到另一個List中的特定影片
下一篇:unity如何用按鈕讓物體移動
