Unity Debug 日志——001

作者: cdf02aaf6ae2 | 来源:发表于2017-02-27 11:15 被阅读337次

    不要在运行时往 Assets 目录写入文件

    Bug 描述

    项目一运行,切到 VS 就提示项目已在该环境外补修改,需要重新加载

    Paste_Image.png

    再切回 Unity 就报脚本已失效

    Paste_Image.png
    The 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 过程

    1. 网上有类似问题的,说是可能某个 MonoBehaviour 的子类类名跟文件名不匹配,于是写了个 Python 脚本扫描了项目目录,把几个可能不匹配的文件都加了个空的类,无用

    2. 又根据网上说的,删了 Library 和 Temp 目录,刚开始是好的,后来又不行了

    3. 由于 VS 提示工程文件过期,需要重新加载,猜测可能是运行时 *.csproj 文件有修改,于是重新导入项目,缓存初始的 *.csproj 文件,跟运行时的对比,发现多个条 None Include 条目,原来是项目运行时把 Error Log 输出到了 Assets 目录

    心得

    Unity 会自动监测 Assets 目录改动,并据此生成并更新 VS 工程文件,所以不要在项目运行时向 Assets 目录写入文件

    绕球面旋转

    Bug 描述

    项目中需要游戏对象沿着球面朝目标点移动,但出现以下情况:

    • 部分模型会在移动过程中变成平躺到球面上

    • 对象在向目标移动时会抖动

    Debug 过程

    通过 Log 输出追踪了一个游戏对象的坐标和角度变化情况,发现前向旋转角度会出现 5,5,-10 这样的情况,猜测移动速度和朝向角度可能不融合,比如移动后导致朝向偏转过大才造成了上述情况,所以对前向角度加了个阀值,情况有所改善

    但发现一种单位还是有抖动的现象,同时会伴随出现平躺的现象,才注意到游戏中对此需求有两种实现方法:

    1. 每帧先让对象朝向目标点,再通过球心依对象右向轴旋转对象
    2. 初始设定目标点时让对象朝向目标点,以后只对位置坐标进行球面插值

    第 2 种方法会有上述问题

    心得

    沿球面移动有两种实现方法:

    1. 对位置坐标进行球面插值
    2. 通过球心依对象的右方向轴旋转(旋转会直接影响对象朝向)

    相较而言,如果在沿球面移动的同时还要保证对象的朝向(如我们项目),无疑第 2 种方法更简单直接

    相关文章

      网友评论

        本文标题:Unity Debug 日志——001

        本文链接:https://www.haomeiwen.com/subject/omfzwttx.html