第十一章 地图动作与地图事件(Map Action and Map Event)
我们已经有了剧本,而且可以运行剧本,但我们还缺少对地图的操作控制。
我们这一章来完成地图上的操作,地图的操作将全部由MapAction
控制。
文章目录
十一 摄像机(Camera)
这一章,我们来处理摄像机的跟随移动,并测试整章。
1 添加Cinemachine(Add “Cinemachine” Plugin)
在游戏中,我们的摄像机在以下情况需要移动:
-
观察地图(光标移到地图边缘);
-
角色移动到地图边缘;
-
其它情况(某些特殊技能或攻击方式等)。
这并不需要我们自己来写跟随方法,Unity官方提供的Cinemachine已经解决了它们。
我们只需要在Asset Store中搜索Cinemachine并添加到项目中,然后进行相应的设置即可。
在我们的项目中,我们只需要在地图场景中让摄像机跟随鼠标光标(MouseCursor)。
而在需要移动摄像机时,只需要让鼠标光标移动即可。
同时Cinemachine配合Timeline
也可以进行复杂的过场动画处理,这暂时不在我们的讨论范围。
在MapAction
中加入它们:
using Cinemachine;
在MapAction
中添加摄像机字段:
private CinemachineVirtualCamera m_VirtualCamera = null;
而在初始化方法中,寻找场景中的摄像机,并设置它:
/// <summary>
/// 读取地图
/// </summary>
/// <param name="scriptName"></param>
/// <returns></returns>
public bool Load(string scriptName)
{
// 省略部分代码
// 寻找摄像机
virtualCamera = GameObject.FindObjectOfType<CinemachineVirtualCamera>();
if (virtualCamera == null)
{
error = "MapAction -> CinemachineVirtualCamera was not found.";
return false;
}
// 设置摄像机跟随MouseCurosr
virtualCamera.Follow = map.mouseCursor.transform;
// 设置状态
status = ActionStatus.WaitInput;
return true;
}
2 移动摄像机(Move Camera)
移动摄像机就相当于移动MouseCursor
。
在平时,我们的MouseCursor
在OnMouseMove