c# - 如何根据另一个场景的条件销毁游戏对象?
问题描述
将是快速和简洁的。首先,我从去年年中开始是 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 保留那个特定的对象,但它所做的只是延续,然后当我从战斗中返回我的场景时,它会被复制。
解决方案
推荐阅读
- batch-file - 在使用 CMD 启动的进程内运行命令
- ffmpeg - 在配置 ffmpeg 时出现错误“未找到 x264”
- asp.net-core-webapi - 在 .Net 5 上使用带有 Web API 的 SQL Server FileStream
- jquery - 无法在 Laravel jQuery AJAX 中上传多个图像
- typescript - 带有泛型的 Typescript 函数接口
- c++11 - 带有 std::begin() 的 const_iterator 和带有 std::cbegin() 的 const_iterator 有什么区别?
- python - 遇到此错误“RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu”
- networking - 我正在尝试通过调制解调器设置用 localhost 替换外部网站
- javascript - 即使具有确切的属性,两个屏幕也会合并 - React
- python - 如何在粗线上获得非圆形箭头?