【问题标题】:Why can't I try catch a TimeOut error on Unet为什么我不能尝试在 Unet 上捕获 TimeOut 错误
【发布时间】:2019-04-29 09:58:26
【问题描述】:

我实际上使用 Unet for Unity,当客户端尝试使用错误 IP 加入时,我遇到超时错误。

我想避免这个超时错误。所以,我试图覆盖 NetworkManager 的“OnDisconnectClient”。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class CustomNetworkManager : NetworkManager {

    public override void OnClientDisconnect(NetworkConnection conn)
    {
       Debug.Log("TimeOutError"); 
    }
}

它可以工作,但是当客户端故意退出服务器时也会调用此函数。 所以我尝试了这个:

public class CustomNetworkManager : NetworkManager {

    public override void OnClientDisconnect(NetworkConnection conn)
    {
        try
        {
            base.OnClientDisconnect(conn);
        }
        catch(Exception e)
        {
            Debug.Log(e.ToString());
        }
    }
}

但是错误没有被捕获并且仍然在控制台中弹出。我也试过不带 Exception 参数的 catch 但还是一样。

感谢您的帮助。

PS:我在 Unity 2018.2.15f1 上工作

【问题讨论】:

  • 请将代码添加为代码,而不是图像。
  • 刚刚编辑,现在是代码。
  • OnClientDisconnect 内部使用try - catch 并没有多大帮助,因为这不是引发错误的方法。超时的不是断开连接,而是连接。也许this 有帮助?
  • @derHugo 感谢您的回答。我在你的链接上尝试了答案,但我没有得到更多。我也不明白,如果OnClientDisconnect 没有抛出错误,为什么覆盖它会删除错误?

标签: c# unity3d unity3d-unet


【解决方案1】:

我会使用 try-catch 语句来捕获异常。然后在 catch 中执行您想做的任何错误处理。

【讨论】:

  • 谢谢,我试过了,但它不起作用,不知道为什么...更新了我的帖子以添加我尝试过的代码。
  • 我注意到您的代码正在控制台中打印错误,这可能是它仍然出现在控制台中的原因吗?也可能是 OnClientDisconnect() 方法中发生了错误,因为如果它比您的 try catch 语句需要在基本方法中。
  • 这不是try-catch语句的目的吗?捕获被调用方法抛出的错误?
  • 您是否尝试过将特定异常放在 try-catch 中,以便它专门查找该错误
猜你喜欢
  • 2022-06-21
  • 1970-01-01
  • 2020-07-31
  • 2022-08-19
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
相关资源
最近更新 更多