1.双击Project视图中, Script目录下的GameManager脚本
2.使用MonoDevelop编辑器打开
二.调式
1.我们可以在脚本里输出调试信息, 并在控制台中显示。
2.接口
(1).Debug.Log:向控制台输出普通信息(白色)。
(2).Debug.LogWarning:向控制台输出警告信息(黄色)。
(3).Debug.LogError:向控制台输出错误信息(红色)。
三.MonoBehaviour生命周期
1.Awake(), 脚本唤醒函数。当游戏对象被创建的时候, 游戏对象绑定的脚本会在该帧内执行Awake()函数, 无论脚本是否处于激活状态。
2.Start(), 该函数在脚本被激活的时候执行, 位于Awake()函数之后。该函数的执行同样也是在游戏对象被创建的帧里。不同的是, 如果脚本处于不激活状态, Start()函数是不会被执行的。
3.Update(), 只有处于激活状态下的脚本, 都会在每一帧里调用Update()函数, 该函数也是最为常用的一个函数, 用来更新逻辑。
4.LateUpdate(), 该函数是延迟更新函数, 处于激活状态下的脚本在每一帧里都会在Update()函数执行后调用该函数, 通常用来调整代码执行的顺序。比如玩家的角色需要一个摄像机来跟随, 那么通常角色的移动逻辑会写在Update()里, 而摄像机的跟随在LateUpdate()里, 这样可以确保在角色的位置计算完毕后, 再根据角色位置确定摄像机的位置和视角。
5.FixedUpdate(), 该函数用于固定更新。在游戏运行的过程中, 每一帧的处理时间是不固定的, 当我们需要固定间隔时间执行某些代码时, 就会用到FixedUpdate()函数。在菜单栏中, 点击”Edit” -> “Project Settings” -> “Time”菜单项, 之后在Inspector视图里出现时间管理器, 其中”Fixed Timestep”选项用于设置FixeUpdate()的更新帧率, 更新帧率默认是0.02秒。固定更新常用于移动物体等操作, 因为固定更新每一帧调用的时间间隔是一样的, 所以移动速度是匀速的。
7.OnDestroy(), 在当前脚本销毁时调用该函数, 可以在该函数里填写删除时需要处理的逻辑。
8. OnEnable(), 激活函数, 当脚本处于激活时调用。
9. OnDisable(), 当脚本被禁用时调用。
10.所有继承自MonoBehaviour的脚本都有一个名为enabled的bool属性值开关。enabled对应脚本名称左侧的勾, 如我们创建的GameManager脚本:
(2).enabled只是与生命周期的函数有关, 与其他函数和所有变量都没有关系。如果脚本中不保护任何生命周期函数, enabled将没有任何意义。
11.生命周期代码
using UnityEngine;
public class GameManager : MonoBehaviour
{
private bool hasPrintUpdate = false;
private bool hasPrintLateUpdate = false;
private bool hasPrintFixedUpdate = false;
private bool hasPrintGUI = false;
void Awake()
{
Debug.Log ("---Awake---");
}
void OnEnable()
{
Debug.Log ("---OnEnable---");
}
void Start ()
{
Debug.Log ("---Start---");
}
void FixedUpdate()
{
if (!hasPrintFixedUpdate)
{
hasPrintFixedUpdate = true;
Debug.Log ("---FixedUpdate---");
}
}
void Update ()
{
if(!hasPrintUpdate)
{
hasPrintUpdate = true;
Debug.Log ("---Update---");
}
}
void LateUpdate()
{
if (!hasPrintLateUpdate)
{
hasPrintLateUpdate = true;
Debug.Log ("---LateUpdate---");
}
}
void OnGUI()
{
if (!hasPrintGUI)
{
hasPrintGUI = true;
Debug.Log ("---OnGUI---");
}
}
void OnDisable()
{
Debug.Log ("---OnDisable---");
}
void OnDestroy()
{
Debug.Log ("---OnDestroy---");
}
}
12.绑定GameManager脚本到Cube游戏对象上(1).在Hierarchy视图中选中Cube游戏对象
(2).在Project视图中,鼠标左键拖拽点GameManager脚本到Inspector视图中
(3).运行脚本,控制台打印
1.UnityGUI使用一个特殊的OnGUI()函数, 在该函数中加入实现UI的脚本。
2.UnityGUI的接口
(1).GUI.xxx(), 需要自己手动填写处于屏幕上的位置。
(2).GUILayout.xxx(),unity会自己排版。
3.UnityGUI测试函数
(1).GUILayout.Label (sting str), 标签用于显示文本。输入的参数为需要显示的文本。
(2).GUILayout.TextField (sting str), 按钮用于出发事件。输入的参数为在按钮上显示的文字。它返回一个bool值, 表示是否按下了按钮。
(3).GUILayout.Button(sting str), 文本区域用于输入文本。输入的参数为显示的文本, 返回经过用户输入改动后的文本。一般用参数变量接收返回值即可。
4.UseGUI实例
using UnityEngine;
public class UseGUI : MonoBehaviour
{
private string text = "";
private string myName = "";
void OnGUI()
{
GUILayout.Label ("please input your name:");
text = GUILayout.TextField (text);
if(GUILayout.Button("submit"))
{
myName = text;
text = string.Empty;
}
if(!string.IsNullOrEmpty(myName))
{
GUILayout.Label ("submit name success, name: " + myName);
}
}
}
5.绑定GameManager脚本到Cube游戏对象上(1).在Hierarchy视图中选中Cube游戏对象
(2).在Inspector视图中, 点击Add Component按钮, 搜索UseGUI脚本进行绑定