一.游戏脚本
二.调式
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()里, 这样可以确保在角色的位置计算完毕后, 再根据角色位置确定摄像机的位置和视角。
7.OnDestroy(), 在当前脚本销毁时调用该函数, 可以在该函数里填写删除时需要处理的逻辑。
8. OnEnable(), 激活函数, 当脚本处于激活时调用。
9. OnDisable(), 当脚本被禁用时调用。
(2).enabled只是与生命周期的函数有关, 与其他函数和所有变量都没有关系。如果脚本中不保护任何生命周期函数, enabled将没有任何意义。
(1).在Hierarchy视图中选中Cube游戏对象
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), 文本区域用于输入文本。输入的参数为显示的文本, 返回经过用户输入改动后的文本。一般用参数变量接收返回值即可。
(1).在Hierarchy视图中选中Cube游戏对象
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脚本进行绑定