如何根据另一个场景的条件销毁游戏对象?

时间:2021-06-19 04:26:12

标签: c# unity3d triggers persistent gameobject

要快速简洁。首先,从去年年中开始,我就是 C# 的初学者。所以我可能看不懂复杂的伪代码解释,先见谅。

问题: 我的场景中有一个对象,它有一个 TriggerBattle.cs 和一个启用了触发器的简单盒子碰撞器。当我的播放器进入触发器时,TriggerBattle.cs 将屏幕淡出为黑色,然后加载到我的战斗场景中。战斗结束后,我希望能够设置一个条件,“我赢得了战斗,当你加载回到世界时,你激活进入战斗的那个对象已经不在了! " 但是.. 我不知道该怎么做。

尝试过: 使用 DontDestroyOnLoad 将其保留在战斗场景中并禁用对象以“隐藏”它,然后如果我赢得了战斗,我用简单的静态布尔值设置的条件切换为 true 只会破坏游戏对象。< /p>

除此之外,它会找到第一个同类型“TriggerBattle”的游戏对象并销毁它,无论它是不是我激活的战斗。 (我的主要问题)

预期结果: 一旦我赢得了那场战斗,我希望我的“世界场景”中的游戏对象永久停用。我不希望它在我切换场景时返回,只有当我创建一个新的游戏过程

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class TriggerBattle : MonoBehaviour
{
    [SerializeField] GameObject fadeScreenObject;
    [SerializeField] GameObject cameraObject;
    [SerializeField] string sceneManager;
    FadeImage fadeImage;

    void Awake()
    {
        fadeImage = FindObjectOfType<FadeImage>();
        cameraObject = FindObjectOfType<Camera>().gameObject;
        fadeScreenObject = FindObjectOfType<FadeImage>().gameObject;
    }

    IEnumerator OnTriggerEnter2D(Collider2D other)
    {
        if (other.GetComponent<Unit>().isPlayer)
        {
            fadeScreenObject.gameObject.SetActive(true);
            yield return StartCoroutine(fadeImage.FadeSlowly(true));
            yield return new WaitForSeconds(0.5f);
            cameraObject.gameObject.SetActive(false);
            Destroy(cameraObject);
            DontDestroyOnLoad(gameObject);
            gameObject.SetActive(false);
            SceneManager.LoadScene(sceneManager);
        }
    }
}

所以你可以看到我试图用 DontDestroyOnLoad 保留那个特定的对象,但它所做的只是结转,然后当我从战斗中返回我的场景时,它会被复制。

0 个答案:

没有答案