【问题标题】:unity The object of type 'GameObject' has been destroyed but you are still trying to access itunity 'GameObject' 类型的对象已被销毁,但您仍在尝试访问它
【发布时间】:2021-11-18 18:44:37
【问题描述】:

我有一个问题,当我将场景从菜单更改为游戏时,当我单击时,我会收到错误消息“'GameObject' 类型的对象已被破坏,但您仍在尝试访问它。”当菜单控制器不在游戏场景中时发生这种情况,过去几天我一直在努力修复它,但找不到解决方法。如果有人可以提供帮助,那就太好了

我们也有一个类似的脚本,它具有相同的代码,只是为了交互而不是场景切换,所以当我们尝试与某些东西交互时,我们会收到错误

感谢您的帮助。

菜单控制器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.SceneManagement;
using API;

public class MenuController : MonoBehaviour
{
    [SerializeField] private InputActionReference shoot;
    [SerializeField] private InputActionReference shoot2;
    public GameObject sendObject;
    public GameObject sendObject2;
    public float range = 1000;




    void Start()
    {
        shoot.action.performed += Shoot;

       
    }

    async void Shoot(InputAction.CallbackContext obj)
    {
        RaycastHit hit;

        if (Physics.Raycast(sendObject.transform.position, sendObject.transform.forward, out hit, range))
        {
            SceneManager.LoadScene("SampleScene");
        }
    }
}    

【问题讨论】:

  • 代码行太多了。将您的代码示例减少到有缺陷的部分并告诉我们您的错误发生在哪一行,而不是扔掉所有代码让我们自己挖掘
  • 我减少了代码现在更好理解了

标签: c# unity3d


【解决方案1】:

错误消息听起来不言自明。

你正试图访问一个已经被销毁的对象。

因为你加载了一个新场景

SceneManager.LoadScene("SampleScene");

当前场景及其对象被卸载/销毁。

每当你处理事件时

void Start()
{
    shoot.action.performed += Shoot;
}

确保在不再需要/不再有效时也删除回调

private void OnDestroy()
{
    shoot.action.performed -= Shoot;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 2020-02-22
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多