Visual Studio修改Unity C#脚本后未同步、Unity控制台输出旧值问题求助
Mac环境下Unity修改C#代码不生效的排查方案
- 先确认代码已经完成磁盘保存
VS里改完内容只在编辑窗口显示是没用的,必须按Cmd + S把内容写入磁盘,Unity只会读取磁盘上的文件内容,不会同步你VS里还没保存的临时编辑状态。 - 90%的新手踩坑点:组件的序列化缓存
只要你把这个脚本挂到过场景物体或者预制体上,Unity会把当时currentAge的取值(也就是旧值31)存在场景/预制体的序列化数据里。后续哪怕你把代码里的初始值改成17,Unity加载组件的时候会优先读面板上存的旧值,根本不会用你代码里写的新值。
对应解决方式:- 选中挂了脚本的物体,在Inspector面板找到对应组件,看
currentAge是不是还显示31 - 要么直接在面板上把数值改成17,要么点组件右上角的三个点,选
Reset,让组件重新加载代码里写的初始值 - 要是你不想被这个缓存机制坑,可以给
currentAge变量加上[System.NonSerialized]修饰,Unity就不会把这个值存到序列化数据里,每次运行都会直接用你代码里写的初始值。
- 选中挂了脚本的物体,在Inspector面板找到对应组件,看
- 检查Unity的自动刷新开关
打开Unity的Edit > Preferences > Asset Pipeline设置,看Auto Refresh选项有没有勾上。如果这个选项被关掉了,哪怕你VS里把代码存好了,切回Unity它也不会自动重新编译,得手动点一下Unity窗口触发资产刷新才会生效。很多人装第三方插件的时候不小心把这个选项关了,自己根本没察觉。 - 确认代码编译没有报错
如果你改代码的时候不小心写了语法错误(比如漏了分号、打错变量名),Unity会直接放弃编译新版本,继续跑上一次能正常运行的旧版本程序集,自然还是输出31。先把控制台里所有红色的编译错误清干净,再运行测试。 - 核对VS打开的是不是正确的源文件
Mac上的VS2019经常会出现工程错位的问题:如果VS打开的是其他路径下的旧代码副本,不是Unity工程Assets文件夹里的那个cs文件,你改半天都是在改副本,Unity当然读不到。最稳妥的验证方式是在Unity的Project窗口里找到目标脚本,右键选Open C# Project重新生成VS工程,确保你编辑的就是Unity正在用的源文件。
快速校验技巧:在Unity的Project窗口里直接双击打开你的目标脚本,如果看到里面的
currentAge还是31,说明你之前在VS里的修改根本没写到正确的文件里。
内容的提问来源于stack exchange,提问作者Nichoalsben.268
相关产品推荐
相关产品推荐

