不要在运行时往 Assets 目录写入文件
Bug 描述
项目一运行,切到 VS 就提示项目已在该环境外补修改,需要重新加载
Paste_Image.png再切回 Unity 就报脚本已失效
Paste_Image.pngThe compiler this script was imported with is not available anymore.
UnityEditorInternal.InternalEditorUtility:GetMonoIslands()
System.Reflection.MethodBase:Invoke(Object, Object[])
SyntaxTree.VisualStudio.Unity.Bridge.CompilationUnit:CompilationUnits()
SyntaxTree.VisualStudio.Unity.Bridge.ProjectSystem.UnitySolutionBuilder:.ctor()
SyntaxTree.VisualStudio.Unity.Bridge.ProjectSystem.UnitySolutionBuilder:CreateSolutionFromAssetDatabase()
SyntaxTree.VisualStudio.Unity.Bridge.ProjectFilesGenerator:GenerateProject()
SyntaxTree.VisualStudio.Unity.Bridge.ProjectFilePostprocessor:OnPreGeneratingCSProjectFiles()
UnityEditor.AssetPostprocessingInternal:PostprocessAllAssets(String[], String[], String[], String[], String[])
然后加载 lua 文件也提示路径不对,搞的项目就没办法调试了
Debug 过程
-
网上有类似问题的,说是可能某个 MonoBehaviour 的子类类名跟文件名不匹配,于是写了个 Python 脚本扫描了项目目录,把几个可能不匹配的文件都加了个空的类,无用
-
又根据网上说的,删了 Library 和 Temp 目录,刚开始是好的,后来又不行了
-
由于 VS 提示工程文件过期,需要重新加载,猜测可能是运行时 *.csproj 文件有修改,于是重新导入项目,缓存初始的 *.csproj 文件,跟运行时的对比,发现多个条 None Include 条目,原来是项目运行时把 Error Log 输出到了 Assets 目录
心得
Unity 会自动监测 Assets 目录改动,并据此生成并更新 VS 工程文件,所以不要在项目运行时向 Assets 目录写入文件
绕球面旋转
Bug 描述
项目中需要游戏对象沿着球面朝目标点移动,但出现以下情况:
-
部分模型会在移动过程中变成平躺到球面上
-
对象在向目标移动时会抖动
Debug 过程
通过 Log 输出追踪了一个游戏对象的坐标和角度变化情况,发现前向旋转角度会出现 5,5,-10 这样的情况,猜测移动速度和朝向角度可能不融合,比如移动后导致朝向偏转过大才造成了上述情况,所以对前向角度加了个阀值,情况有所改善
但发现一种单位还是有抖动的现象,同时会伴随出现平躺的现象,才注意到游戏中对此需求有两种实现方法:
- 每帧先让对象朝向目标点,再通过球心依对象右向轴旋转对象
- 初始设定目标点时让对象朝向目标点,以后只对位置坐标进行球面插值
第 2 种方法会有上述问题
心得
沿球面移动有两种实现方法:
- 对位置坐标进行球面插值
- 通过球心依对象的右方向轴旋转(旋转会直接影响对象朝向)
相较而言,如果在沿球面移动的同时还要保证对象的朝向(如我们项目),无疑第 2 种方法更简单直接
网友评论