出现错误 CS1955:不可调用的成员“SceneManager”不能像方法一样使用

Posted

技术标签:

【中文标题】出现错误 CS1955:不可调用的成员“SceneManager”不能像方法一样使用【英文标题】:Getting error CS1955: Non-invocable member 'SceneManager' cannot be used like a method 【发布时间】:2022-01-16 06:39:46 【问题描述】:

我试图让场景在玩家触发失败条件时重新加载(通过 dieieng),以创建各种检查点系统。这个游戏是 FPS 顺便说一句,以防万一。

以下是相关代码:

string m_SceneToLoad;

.

void Update()
    
        if (gameIsEnding)
        
            float timeRatio = 1 - (m_TimeLoadEndGameScene - Time.time) / endSceneLoadDelay;
            endGameFadeCanvasGroup.alpha = timeRatio;

            AudioUtility.SetMasterVolume(1 - timeRatio);

            // See if it's time to load the end scene (after the delay)
            if (Time.time >= m_TimeLoadEndGameScene)
            
                SceneManager.LoadScene(m_SceneToLoad);
                gameIsEnding = false;
            
        
        else
        
            if (m_ObjectiveManager.AreAllObjectivesCompleted())
                EndGame(true);

            // Test if player died
            if (m_Player.isDead)
                EndGame(false);
        
    

.

void EndGame(bool win)
    
        // unlocks the cursor before leaving the scene, to be able to click buttons
        Cursor.lockState = CursorLockMode.None;
        Cursor.visible = true;

        // Remember that we need to load the appropriate end scene after a delay
        gameIsEnding = true;
        endGameFadeCanvasGroup.gameObject.SetActive(true);
        if (win)
        
            m_SceneToLoad = winSceneName;
            m_TimeLoadEndGameScene = Time.time + endSceneLoadDelay + delayBeforeFadeToBlack;

            // play a sound on win
            var audiosource = gameObject.AddComponent<AudioSource>();
            audioSource.clip = victorySound;
            audioSource.playOnAwake = false;
            audioSource.outputAudioMixerGroup = AudioUtility.GetAudioGroup(AudioUtility.AudioGroups.HUDVictory);
            audioSource.PlayScheduled(AudioSettings.dspTime + delayBeforeWinMessage);

            // create a game message
            var message = Instantiate(WinGameMessagePrefab).GetComponent<DisplayMessage>();
            if (message)
            
                message.delayBeforeShowing = delayBeforeWinMessage;
                message.GetComponent<Transform>().SetAsLastSibling();
            
        
        else
        
            
            Scene scene = SceneManager().GetActiveScene;
            m_SceneToLoad = scene.name;
            m_TimeLoadEndGameScene = Time.time + endSceneLoadDelay;
        
    

我不明白为什么我会收到错误消息。请帮忙。 编辑:错误在这一行:Scene scene = SceneManager().GetActiveScene;

【问题讨论】:

如果你说错误在哪里就好了,那我们就不用去搜索了。我认为它在这里:Scene scene = SceneManager().GetActiveScene; 显然,SceneManager 不是方法,而是属性。 @PMF 正确,我会添加它 @PMF SceneManagertype 而不是属性。 SceneManager.GetActiveScene() 然而是一种方法 ;) @derHugo Duh,所以这是另一种可能性。我实际上猜到了这个;-) 【参考方案1】:

SceneManager 是一个类型,而不是一个属性。 SceneManager.GetActiveScene() 然而是一个静态方法...

应该是这样的

var scene = SceneManager.GetActiveScene();

【讨论】:

以上是关于出现错误 CS1955:不可调用的成员“SceneManager”不能像方法一样使用的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:在第 7 行调用非对象上的成员函数 prepare()。我想不通,为啥会出现此错误?

如何将.cs文件编译成.exe可执行文件/ 我用vs2010命令提示编译.cs文件出现错误

带有 mongodb 的流明:出现错误:在 null 上调用成员函数 prepare()

Assets\Footsteps.cs(5,20):错误 CS0116:命名空间不能直接包含字段或方法等成员 [重复]

NOI2015 程序自动分析(luogu p1955)

Numpy.ndarray 对象不可调用错误原因