Unity3D与游戏开发unity3D技术分享游戏设计&游戏开发

Unity Debug 日志——001

2017-02-27  本文已影响337人  cdf02aaf6ae2

不要在运行时往 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 种方法更简单直接

上一篇下一篇

猜你喜欢

热点阅读