首页 > 解决方案 > 如何根据另一个场景的条件销毁游戏对象?

问题描述

将是快速和简洁的。首先,我从去年年中开始是 C# 的初学者。所以我可能看不懂复杂的伪代码解释,提前抱歉。

问题: 我的场景中有一个对象,它有一个 TriggerBattle.cs 和一个启用了触发器的简单盒子碰撞器。当我的玩家进入触发器时,TriggerBattle.cs 然后将屏幕淡出为黑色,然后加载到我的战斗场景中。战斗结束后,我希望能够设置一个条件说,“我赢得了战斗,当你加载回世界时,你激活进入战斗的对象不再存在! ”但是..我不能工作如何做到这一点。

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

除此之外,它会找到第一个相同类型的“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 保留那个特定的对象,但它所做的只是延续,然后当我从战斗中返回我的场景时,它会被复制。

标签: c#unity3dtriggerspersistentgameobject

解决方案


推荐阅读