Unity3D摄像机高级控制
2015-11-23 10:44
435 查看
在游戏场景中,通常摄像机如果需要进行一些不规则的固定运动,比如片头的场景摄像机的移动,此时如果通过代码来控制,虽然可以实现但调试过程并不直观,所以我们可以通过绑定摄像机动作来达到这一效果。
创建动作的过程这里不再赘述,前面的文章中有详细的讲解。
首先将创建好的动作绑定至摄像机,利用关键帧补间动画进行摄像机运动控制,如图
点击播放即可查看摄像机的实时运动效果,这里主要是针对xyz的位置及角度6个参赛进行调整,从而实现电影版的摄像机运动效果,这里我们且将动作命名为Move,并绑定至1号摄像机上
接下来我们创建一个摄像机管理脚本 CameraManger.cs
此时通过主函数main的全局状态机即可控制摄像机的切换,但是这里有一个问题,之前我们设定好的move动作无法播放,其原因是我们在Updata中,每一帧都调用了onActiveFalse()函数,故当move动作一播放摄像机又被关闭,循环往复。
这里我们用一个小的技巧,我且命名为OnceKey,类似一个一次性开关。
修改代码如下:
转载自:http://coder.beitown.com/archives/579
创建动作的过程这里不再赘述,前面的文章中有详细的讲解。
首先将创建好的动作绑定至摄像机,利用关键帧补间动画进行摄像机运动控制,如图
点击播放即可查看摄像机的实时运动效果,这里主要是针对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
相关文章推荐
- Android版Unity游戏引擎的集成Admob管理库教程
- Unity3D游戏开发之C++插件接入
- 解析OBJ模型并将其加载到Unity3D场景中
- Unity3D 自定义 Editor 扩展
- 深入浅出聊Unity3D项目优化:从Draw Calls到GC
- 【Unity常识】游戏对象及脚本的状态与Start等函数的调用关系
- Unity3D -- 质量设置(Quality Settings)
- Unity3D 处于Camera跟随游戏对象后面拍摄的方法
- Unity& leapmotion开发实录
- Unity给力插件之LittleLocalization
- 【转】【UNITY3D 游戏开发之六】UNITY 协程COROUTINE与INVOKE
- Unity触发器有时失效的原因
- unity让物体鼠标平滑移动物体
- Unity中使用SLua的一些注意事项
- Unity中的输入
- Unity3D关于刚体(RigidBody)与碰撞体(Collider)的探索(二)
- unity编辑器学习
- 怎样实现一个潮流的开关按钮
- Unity的UGUI中使用CustomFont(BMFont)
- 【unity插件】BehaviourDesigner行为树插件