You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何从JSON对象获取int类型数据?

针对SocketIO事件处理代码的优化与排查建议

嘿,别担心,新手遇到这类问题太正常啦!我帮你梳理下这段处理SocketIO事件的代码~

首先先把你的客户端代码用代码块展示出来,方便查看:

private void OnStart(SocketIOEvent obj){ 
    if (obj != null) { 
        JSONObject json = obj.data; 
        id = json ["id"].str; 
        indexPlayer = Convert.ToInt32(json ["num"].str); 
        currentPlayer.GetComponent<Player>().AddPlayer (id, indexPlayer); 
        Debug.Log(json); 
    } else { 
        Debug.Log ("NULL Data"); 
    } 
}

从你给出的调试结果能打印出JSON内容来看,SocketIO的事件接收和基础数据解析是正常的!接下来可以从这几个方向优化排查,避免潜在问题:

  • 增加空引用安全检查:
    直接调用currentPlayer.GetComponent<Player>()如果currentPlayer为空或者找不到Player组件,会直接抛出空引用错误。可以改成更安全的写法:
    if (currentPlayer != null)
    {
        Player playerComponent = currentPlayer.GetComponent<Player>();
        if (playerComponent != null)
        {
            playerComponent.AddPlayer(id, indexPlayer);
        }
        else
        {
            Debug.LogError("currentPlayer对象上未挂载Player组件!");
        }
    }
    else
    {
        Debug.LogError("currentPlayer对象为空,请检查赋值!");
    }
    
  • 更安全的JSON字段解析:
    直接取json["id"].str如果JSON里没有对应字段会报错,解析数字用Convert.ToInt32如果格式不对也会报错,建议改成:
    if (json.HasField("id") && json.HasField("num"))
    {
        id = json["id"].str;
        // 用TryParse避免数字格式错误导致的崩溃
        if (int.TryParse(json["num"].str, out indexPlayer))
        {
            // 这里再执行AddPlayer的逻辑
        }
        else
        {
            Debug.LogError($"JSON中的num字段值「{json["num"].str}」不是有效的整数!");
        }
    }
    else
    {
        Debug.LogError("接收到的JSON数据缺少id或num字段!");
    }
    
  • 增加解析结果调试:
    在解析完id和indexPlayer后打印一下具体值,确认解析是否正确:
    Debug.Log($"解析完成:id = {id},indexPlayer = {indexPlayer}");
    

如果你的问题是AddPlayer方法没有按预期工作,通过上面的检查步骤,就能快速定位是组件为空、JSON字段异常,还是数字格式错误导致的问题啦~

内容的提问来源于stack exchange,提问作者Vincent Wedison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:16:07