Unity 报错求解决

Unity运行通讯程序时候报了这个错,请问这是为什么,怎么解决呢

NotSupportedException: Could not register to wait for file descriptor 18980
System.Net.Sockets.Socket.QueueIOSelectorJob (System.Threading.SemaphoreSlim sem, System.IntPtr handle, System.IOSelectorJob job) (at <6bb3336e864c4ab48c43a2538573e586>:0)
System.Net.Sockets.Socket.BeginSendTo (System.Byte[] buffer, System.Int32 offset, System.Int32 size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, System.AsyncCallback callback, System.Object state) (at <6bb3336e864c4ab48c43a2538573e586>:0)
Microsoft.Unity.VisualStudio.Editor.Messaging.Messager.SendMessage (System.Net.IPEndPoint target, Microsoft.Unity.VisualStudio.Editor.Messaging.MessageType type, System.String value) (at ./Library/PackageCache/com.unity.ide.visualstudio@2.0.18/Editor/Messaging/Messenger.cs:173)
Microsoft.Unity.VisualStudio.Editor.VisualStudioIntegration.Answer (System.Net.IPEndPoint targetEndPoint, Microsoft.Unity.VisualStudio.Editor.Messaging.MessageType answerType, System.String answerValue) (at ./Library/PackageCache/com.unity.ide.visualstudio@2.0.18/Editor/VisualStudioIntegration.cs:271)
Microsoft.Unity.VisualStudio.Editor.VisualStudioIntegration.Answer (Microsoft.Unity.VisualStudio.Editor.Messaging.Message message, Microsoft.Unity.VisualStudio.Editor.Messaging.MessageType answerType, System.String answerValue) (at ./Library/PackageCache/com.unity.ide.visualstudio@2.0.18/Editor/VisualStudioIntegration.cs:263)
Microsoft.Unity.VisualStudio.Editor.VisualStudioIntegration.ProcessIncoming (Microsoft.Unity.VisualStudio.Editor.Messaging.Message message) (at ./Library/PackageCache/com.unity.ide.visualstudio@2.0.18/Editor/VisualStudioIntegration.cs:169)
Microsoft.Unity.VisualStudio.Editor.VisualStudioIntegration.OnUpdate () (at ./Library/PackageCache/com.unity.ide.visualstudio@2.0.18/Editor/VisualStudioIntegration.cs:136)
UnityEditor.EditorApplication.Internal_CallUpdateFunctions () (at <5030de2575e0434f93fa486a5ff56077>:0)

img

根据提供的错误信息:

  1. 错误消息中提到了套接字(Socket)和异步回调(AsyncCallback),这意味着可能涉及到与网络通信相关的问题。
  2. 错误消息中还提到了Unity相关的集成(Visual Studio Integration),这可能意味着问题出现在Unity的编译器集成过程中。

要解决这个问题,可以尝试以下步骤:

  1. 检查网络连接和配置:确保网络连接正常,防火墙配置正确,没有任何网络相关的问题。
  2. 更新或重新安装Unity和相关插件:尝试更新Unity和相关插件(特别是Visual Studio Integration插件)到最新版本,并重新安装它们,以确保没有已知的问题。
  3. 检查代码错误:检查代码中是否存在可能导致此错误的问题,特别是与网络通信或套接字操作相关的代码。确保代码正确处理套接字操作,正确注册和使用异步回调函数等。
  4. 检查文件描述符(File Descriptor)相关的问题:错误消息中提到了无法注册等待文件描述符,可能是由于文件描述符资源不足或其他问题导致的。可以尝试增加操作系统的文件描述符限制,并检查代码中是否正确处理文件描述符的使用。

如果上述步骤仍无法解决问题,建议参考Unity的官方文档、论坛或向Unity的技术支持团队寻求帮助,他们可能为您提供更具体的解决方案。

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7759230
  • 这篇博客也不错, 你可以看下Unity3D 之跳跃判断
  • 除此之外, 这篇博客: Unity 已知落点和速度自动计算发射角度中的 Unity 已知落点和速度自动计算发射角度 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在发射物已知落点和速度的情况下如果刚体应用重力,不容易算出发射角度,以下为计算过程

    /// <summary>
    /// 挂载到发射器上即可
    /// </summary>
    public class Rotate : MonoBehaviour
    {
        public GameObject prefab;   //发射物
        public float speed;         //发射物速度
        public bool 抛射 = false;   //抛射:仰角 > 45°,否:仰角 < 45°
        Ray RayMouse;
        Vector3 direction;
        Quaternion rotation;
        
        void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                GameObject go = Instantiate(prefab, transform.position, transform.rotation);
                go.AddComponent<Rigidbody>().velocity = go.transform.forward * speed;
            }
    
            RaycastHit hit;
            RayMouse = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(RayMouse.origin, RayMouse.direction, out hit, Mathf.Infinity))
            {
                RotateToMouseDirection(gameObject, hit.point);
            }
        }
    
        /// <summary>
        /// 执行整体旋转
        /// </summary>
        /// <param name="obj">旋转的物体(自身)</param>
        /// <param name="destination">目标点(鼠标指向)</param>
        void RotateToMouseDirection(GameObject obj, Vector3 destination)
        {
            direction = destination - obj.transform.position;
            rotation = Quaternion.LookRotation(direction);
    
            Vector3 finalAngle = rotation.eulerAngles;
            float targetAng = Angle(destination);
            finalAngle = new Vector3(-targetAng, finalAngle.y, finalAngle.z);//注意正负
    
            obj.transform.localRotation = Quaternion.Euler(finalAngle);
        }
    
        /// <summary>
        /// 自动计算x欧拉角,即仰角
        /// </summary>
        /// <param name="target">目标点坐标</param>
        /// <returns></returns>
        float Angle(Vector3 target)
        {
            float angleX;
            float distX = Vector2.Distance(new Vector2(target.x, target.z), new Vector2(transform.position.x, transform.position.z));
            float distY = target.y - transform.position.y;
            float posBase = (Physics.gravity.y * Mathf.Pow(distX, 2.0f)) / (2.0f * Mathf.Pow(speed, 2.0f));
            float posX = distX / posBase;
            float posY = (Mathf.Pow(posX, 2.0f) / 4.0f) - ((posBase - distY) / posBase);
            if (posY >= 0.0f)
            {
                if (抛射)  //字段
                    angleX = Mathf.Rad2Deg * Mathf.Atan(-posX / 2.0f + Mathf.Pow(posY, 0.5f));
                else
                    angleX = Mathf.Rad2Deg * Mathf.Atan(-posX / 2.0f - Mathf.Pow(posY, 0.5f));
            }
            else
            {
                angleX = 45.0f;
            }
            return angleX;
        }
    }
    

    实际效果
    实际效果
    抛射效果
    选择为抛射

  • 您还可以看一下 伍晓波老师的Unity3D实战入门之简单消消乐课程中的 对棋盘中的方块进行分组小节, 巩固相关知识点