标题C# 编写Unity脚本及调试方法
参考文献:Unity脚本设计/(美) Alan Thorm著 刘君译
(1)新建一个简单的脚本,命名为DebugTest,代码如下,当与某一对象进行绑定时,可获得场景中全部对象的列表(包括自身),当启动关卡(Scene)并执行Start()时,可将对象位置设置在世界原点位置处,即(0,0,0)。
using UnityEngine;
using System.Collections;
public class DebugTest : MonoBehaviour
{
// Use this for initialization
void Start ()
{
//Get all game objects in scene
Transform[] Objs = Object.FindObjectsOfType<Transform>();
//Cycle through all objects
for(int i=0; i<Objs.Length; i++)
{
//Set object to world origin
Objs[i].position = Vector3.zero;
}
}
}
(2)将DebugTest.cs与某一对象进行绑定,假设与场景中的Cube绑定,即成为Cube的组件;
(3)在VS中设置断点;
在Assets中双击DebugTest.cs,在VS中设置断点;若没有把VS2017设置为默认的脚本编辑器,可单击编辑器菜单栏中的Edit按钮,再单击下拉菜单中的“Preference……”按钮,进入参数设置界面,单击“External Tools",进入外部设置界面,查看第一项”External ScriptEditor“外部脚本编辑器选中项是否为Visual Studio,若不是,则单击”Browse……“选择Visual Studio的安装路径。
(4)调试→附加Unity调试程序;选择项目,按确定;此时在VS底部弹出局部变量框,输出框;
(5)回到Unity中,点击Play按钮;若到达断点,则Unity的执行过程处于停止状态(中断模式)。然后会自动跳转到VS中的断点行,且断点呈现黄色高亮显示,并以此显示当前执行步骤。
此时可在局部变量框中查看处于活动状态的变量值;
当处于中断状态时,一种快速添加查看的方式是,将鼠标指针悬停在高亮显示的代码行上,稍后将自动弹出一个窗口,该窗口将显示某一变量的完整查看信息。
(6)按F5、F10、F11等进行调试;
(7)调用堆栈
调用堆栈窗口可用于查看函数之间的调用关系;将上述代码稍作改进,类中包含多个函数,并于其中调用其他函数。
using UnityEngine;
using System.Collections;
public class DebugTest : MonoBehaviour
{
// Use this for initialization
void Start ()
{
//Get all game objects in scene
Transform[] Objs = Object.FindObjectsOfType<Transform>();
//Cycle through all objects
for(int i=0; i<Objs.Length; i++)
{
//Set object to world origin
Objs[i].position = Vector3.zero;
}
//Enter Function 01
Func01();
}
//-------------------------------------
//Function calls func2
void Func01()
{
Func02();
}
//-------------------------------------
//Function calls func3
void Func02()
{
Func03();
}
//-------------------------------------
//Function prints message
void Func03()
{
Debug.Log ("Entered Function 3");
}
//-------------------------------------
}
将断点设置在38行;
按上述步骤执行调试,当到达该行时,执行流程将处于暂停状态。在 调用堆栈窗口,可以发现,调用堆栈窗口将以逆序方式列出函数名称。具体而言就是活动函数或近期函数位于栈顶,并向下至早期或首个被调用的函数。双击某个函数,可在源代码中查看具体情况。
(8)调用层次结构
鼠标指针置于Func02()内,右击选择查看调用层次结构
在底部弹出调用层次结构,可以看到Func02()的前后调用函数关系;
(9)追踪点
在16行设置断点;
右击断点选择操作;
在将消息记录到输出窗口中输入i:{i}
此时圆形的断点标志变成菱形;
按之前调试方法调试,在调试时游戏将直接在Unity Editor中以常规模式运行,当遇到跟踪点时,程序并不会像断点那样处于暂停状态或进入中断模式。而是向窗口输出对应语句;