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

使用Getter/Setter设置controlType导致Unity 2020.2.20崩溃,求排查

问题分析与解决

核心崩溃原因:无限递归导致栈溢出

你在config.cs里定义的controlType属性,其get和set访问器直接操作自身,会触发无限递归调用:

public CONTROL_TYPE controlType
{
    get { return controlType; } // 调用get时会再次触发get,无限循环
    set { controlType = value; } // 调用set时会再次触发set,无限循环
}

这种写法会让CPU持续执行递归,最终引发栈溢出,直接导致Unity编辑器崩溃。

修复步骤

1. 给属性添加私有存储字段

修改config.cs,用私有字段存储属性值,彻底避免递归:

public enum CONTROL_TYPE : int
{
    TOUCH_CONTROL = 0,
    TILT_CONTROL = 1,
};

// 私有字段存储实际值
private CONTROL_TYPE _controlType;
public CONTROL_TYPE controlType
{
    get { return _controlType; }
    set { _controlType = value; }
}

或者用更简洁的自动属性写法(C# 3.0及以上版本支持):

public enum CONTROL_TYPE : int
{
    TOUCH_CONTROL = 0,
    TILT_CONTROL = 1,
};

public CONTROL_TYPE controlType { get; set; }

2. 修正menu.cs中的其他错误

  • 类名规范:C#类名建议用大驼峰格式,config应改为Config,对应引用也要同步修改
  • 变量未初始化:gameConfig需要先获取场景中的Config组件,或实例化对象
  • 枚举引用错误:GameConfig.CONTROL_TYPE应改为Config.CONTROL_TYPE(匹配类名)

修改后的menu.cs示例:

// 在Inspector面板中拖拽挂载了Config脚本的对象到此处
public Config gameConfig;

void Start()
{   
    // 先检查对象是否有效,避免空引用异常
    if(gameConfig != null)
    {
        gameConfig.controlType = Config.CONTROL_TYPE.TOUCH_CONTROL;
    }
}

额外建议

  • 遵循C#命名规范:类名、枚举名用大驼峰(比如ControlType替代CONTROL_TYPE),私有字段以下划线开头,提升代码可读性
  • 操作前做空引用检查,减少不必要的编辑器报错或崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:33:19