Unity2D-关于DontDestroyOnLoad的问题

本文关键字:问题 DontDestroyOnLoad 关于 Unity2D- | 更新日期: 2023-09-27 18:28:36

在我目前制作的游戏中,我使用附加到Player对象的脚本来计算分数和时间。我想创建一个新的场景,当级别被清除时,它将作为结果屏幕。

如果脚本附加到我的播放器上,这意味着我的播放器也应该出现在结果屏幕中,对吧?我不确定DontDestroyOnLoad实际上是如何工作的,因为我以前从未使用过它。将相机移动到关卡的另一部分,而不是制作一个全新的场景,会更容易吗?

这是我的问题的相关代码:

public GUIText scoreText;
public GUIText timerText;
private int score;
public float seconds = 0f;
public float minutes = 0f;
public float moreSeconds = 0f;

void Start()
{
    score = 0;
    UpdateScore ();
    moreSeconds = Time.realtimeSinceStartup;
}
void Update()
{
    seconds = Time.realtimeSinceStartup - moreSeconds; 
    if (seconds > 60) 
    {
        seconds = 0;
        moreSeconds = Time.realtimeSinceStartup;
        minutes = minutes + 1;
    }
    if (seconds < 10) 
    {
        timerText.text = "Time: " + (int)minutes + " : 0" + (int)seconds;
    } 
    else 
    {
        timerText.text = "Time: " + (int)minutes + " : " + (int)seconds;
    }
}
public void AddScore(int scoreInc)
{
    score += scoreInc;
    UpdateScore ();
}
void UpdateScore()
{
    scoreText.text = "" + score;
}

Unity2D-关于DontDestroyOnLoad的问题

最好的选择是有两个摄像头,一个用于游戏中的动作,另一个用于你的结果,所以当任务结束时,你关闭游戏摄像头,打开结果摄像头

void whenLevelEnds(){
    GameObject gamecamObj = GameObject.FindGameObjectsWithTag("gamecam"); //give game cam and main cam tags so we would be able to find them
    GameObject menucamObj = GameObject.FindGameObjectsWithTag("menucam");
    Camera gamecam = gamecamObj.GetComponent<Camera>() as Camera;
       gamecam.enabled = false;
    Camera menucam = menucamObj.GetComponent<Camera>() as Camera;
       menucam .enabled = true;
}

您可以将游戏摄像头和菜单摄像头设置为在其cullingmask选项上渲染不同的东西,例如将菜单摄像头设置成仅渲染GUI对象

如果你想使用DontDestroyOnLoad并想摆脱显示播放器,你可以玩家在上,并告诉您的相机不要在渲染该层

您可以将DontDestroyOnLoad置于唤醒中,以保护您的游戏对象在新场景中不被破坏

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