在游戏场景中,通常摄像机如果需要进行一些不规则的固定运动,比如片头的场景摄像机的移动,此时如果通过代码来控制,虽然可以实现但调试过程并不直观,所以我们可以通过绑定摄像机动作来达到这一效果。
创建动作的过程这里不再赘述,前面的文章中有详细的讲解。
首先将创建好的动作绑定至摄像机,利用关键帧补间动画进行摄像机运动控制,如图
点击播放即可查看摄像机的实时运动效果,这里主要是针对xyz的位置及角度6个参赛进行调整,从而实现电影版的摄像机运动效果,这里我们且将动作命名为Move,并绑定至1号摄像机上
接下来我们创建一个摄像机管理脚本 CameraManger.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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,类似一个一次性开关。
修改代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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号相机的动作播放完毕后,即可自动进入下一个状态。
关于摄像机的高级控制这里只是冰山一角,写得复杂了你们也不愿看了,此文且作为一个引子吧。更多的控制脚本有待大家去举一反三去发掘。
谢谢关注。
BeiTown
2013.03.11