在游戏场景中,通常摄像机如果需要进行一些不规则的固定运动,比如片头的场景摄像机的移动,此时如果通过代码来控制,虽然可以实现但调试过程并不直观,所以我们可以通过绑定摄像机动作来达到这一效果。
创建动作的过程这里不再赘述,前面的文章中有详细的讲解。
创建动作的过程这里不再赘述,前面的文章中有详细的讲解。
首先将创建好的动作绑定至摄像机,利用关键帧补间动画进行摄像机运动控制,如图
点击播放即可查看摄像机的实时运动效果,这里主要是针对xyz的位置及角度6个参赛进行调整,从而实现电影版的摄像机运动效果,这里我们且将动作命名为Move,并绑定至1号摄像机上
接下来我们创建一个摄像机管理脚本 CameraManger.cs
using UnityEngine;
using System.Collections;
public class CameraManger : MonoBehaviour {
public GameObject Camera_1;
public GameObject Camera_2;
public GameObject Camera_3;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
switch (Main.state)
{
case Main.STATE.READY:
onActiveFalse();
Camera_1.SetActive(true);
Camera_1.animation.Play("move");
break;
case Main.STATE.START:
onActiveFalse();
Camera_2.SetActive(true);
break;
default:
break;
}
}
void onActiveFalse()
{
Camera_1.SetActive(false);
Camera_2.SetActive(false);
Camera_3.SetActive(false);
}
}
此时通过主函数main的全局状态机即可控制摄像机的切换,但是这里有一个问题,之前我们设定好的move动作无法播放,其原因是我们在Updata中,每一帧都调用了onActiveFalse()函数,故当move动作一播放摄像机又被关闭,循环往复。
这里我们用一个小的技巧,我且命名为OnceKey,类似一个一次性开关。
修改代码如下:
private bool onecKey;
void Update () {
switch (Main.state)
{
case Main.STATE.READY:
if (!onecKey)
{
onActiveFalse();
Camera_1.SetActive(true);
Camera_1.animation.Play("move");
onecKey = true;
}
if (!Camera_1.animation.isPlaying)
{
Main.state = Main.STATE.START;
onecKey = false;
}
break;
case Main.STATE.START:
onActiveFalse();
Camera_2.SetActive(true);
break;
default:
break;
}
}
此时当1号相机的动作播放完毕后,即可自动进入下一个状态。
转载自:http://coder.beitown.com/archives/579