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

Unity2D中C#方法无异常终止问题排查求助

Unity2D国际象棋Piece类CopyInfoToGlobals方法终止问题排查与解决

问题现象

  • 调用CopyInfoToGlobals()时,执行到Add()操作后方法无异常提示但直接终止
  • 循环内的print($"yfdhg {ew[r].x}, {ew[r].y}")仅打印一次
  • 循环后的print("yuo")从未执行,调用方法后无任何返回输出

原因分析

  1. 二维数组内List未实例化:globals.PieceInteractions是静态二维数组,仅创建了数组框架,但每个元素默认是null。第一次执行Add()时触发NullReferenceException,Unity部分场景下不会显示异常日志,但方法已因异常中断。
  2. 循环条件错误:r < ew.Count - 1会跳过最后一个键值对,即使修复空引用问题,也无法处理所有元素。

解决方案

1. 初始化PieceInteractions的所有List元素

在Globals类的静态构造函数或Awake方法中,为二维数组的每个位置创建新的List实例:

public class Globals
{
    public static List<Piece.LocalBoardRepresention>[,] PieceInteractions = new List<Piece.LocalBoardRepresention>[8,8];

    static Globals()
    {
        for (int x = 0; x < 8; x++)
        {
            for (int y = 0; y < 8; y++)
            {
                PieceInteractions[x, y] = new List<Piece.LocalBoardRepresention>();
            }
        }
    }
}

2. 修正循环条件

把循环条件改成r < ew.Count,确保遍历所有字典键:

for (int r = 0; r < ew.Count; r++)
{
    print($"yfdhg {ew[r].x}, {ew[r].y}");
    globals.PieceInteractions[ew[r].x, ew[r].y].Add(range[ew[r]]);   
}

3. 可选:添加空值安全检查

为避免后续出现空引用问题,在Add操作前增加判断:

var targetPos = ew[r];
if (globals.PieceInteractions[targetPos.x, targetPos.y] != null 
    && range.TryGetValue(targetPos, out var boardRep))
{
    globals.PieceInteractions[targetPos.x, targetPos.y].Add(boardRep);
}

内容的提问来源于stack exchange,提问作者Tyler Levy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:12:32