打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
剧情插件Cutscene Creator uSequencer 1.3.7.1使用说明二

说明:以下都是本人个人见解,如有错误请自行进行纠正

四、优缺点

优点:

1.首先就是对GameObject属性的控制,可以像UnityAnimation动画一样通过关键帧动画控制GameObject的位置、旋转、数值变化、开关等,简直就是Animation的替代品;

2.然后就是源生支持Mecanim动画系统,不论是简单的动画播放或者多层动画控制都是得心应手,信手拈来;

3.其次当然是强大的事件系统,几乎可以控制所有的东西,无所不能;

4.最后当然是USequencer可以直接在不Play的情况下预览剧情、播放动画和特效等,这极大的方便了美术的制作和使用,而对于那些与场景交互密切的剧情,就更加需要这个功能,想象一下不用每修改一次参数就要Play一下去看修改的对不对,靠的紧不紧等

缺点:

1.首先依然还是属性控制,在保存为Prefab的时候,会生成很多的小文件,几乎是一个关键帧对应一个小文件,对项目目录结构不友好,保存完后重新打开需要一个个的解析这些小文件,还常常失败,导致要重新制作等;

2.然后就是源生的播放Mecanim那套东西,也常常出各种问题,不是Animator找不到,就是Animation找不到,一些动画控制器状态的增删改查也会引起做好的剧情打不开等等;

3.其次是事件系统,这个到没出什么BUG,只是原版的瞬时事件和持续事件在原版默认情况下显示不够准确,有时会造成美术的误读等(后面有解决方法,但是只有源码版的可以修改),事件系统除了这个就没有其他问题

4.最后还是编辑模式下的预览,编辑模式下,毕竟不具备我们游戏运行时所需要的那些环境(比如当前玩家Animator),也因此我们常常要写两份代码,一份在编辑时执行,一份在运行时执行,这点非常的考验人。有的是编辑下能看到效果,有的是运行时才能看到效果。

5.工程容易崩溃,东西可能要从头开始做

五、未解决问题

1. 如何倒着播放

2.02 AdditivelyLoading Cutscene场景中的  怎么加载出来的

 

3. BasicExample01-PropertiesAndEvents场景中摄像机的路径是怎么设置的                      

4.动态加载另一个场景时,有错误:You have added an AutoPlaySequence, however you haven't assigned it asequence

六、能使用的类有USEventBase USEventBaseEditor  USSequencer
七、其他功能实现
事件的扩展

using UnityEngine;

using System.Collections;

namespace WellFired

{

///<summary>

/// A custom event that allows you to alter thegame's TimeScale over a given time period with the specified curve.

///</summary>

[USequencerFriendlyName("Time Scale")]//用来做事件的GameObject名称和剧情面板中的名字

[USequencerEvent("Time/Time Scale")]//该事件的菜单Item

[USequencerEventHideDuration()]//表示该事件是否为瞬时事件(有这个命令会被标识为瞬时事件,没有则为持续事件)

public classUSTimeScaleEvent :USEventBase

{

          ///<summary>

          /// This curve defines the TimeScale over agiven time period.

          ///</summary>

    public AnimationCurve scaleCurve = new AnimationCurve(new Keyframe(0.0f, 1.0f), new Keyframe(0.1f, 0.2f), new Keyframe(2.0f, 1.0f));

    private float currentCurveSampleTime = 0.0f;

    private float prevTimeScale = 1.0f;

        //事件开始时执行,类似于Enable,只执行一次

   public override void FireEvent()

   {

        prevTimeScale = Time.timeScale;

   }

  

        //事件持续执行时调用,类似于Update,多次执行

   public override void ProcessEvent(float deltaTime)

   {

        currentCurveSampleTime = deltaTime;

        Time.timeScale = Mathf.Max(0f,scaleCurve.Evaluate(currentCurveSampleTime));

   }

        //事件结束时执行,类似于Disable,只执行一次(结束时自动调用)

    public override void EndEvent()

    {

        float sampleTime = scaleCurve.keys[scaleCurve.length - 1].time;

        Time.timeScale = Mathf.Max(0f, scaleCurve.Evaluate(sampleTime));

    }

        //事件被停止时执行,整个剧情SequenceStop时执行

    public override void StopEvent()

    {

        UndoEvent();

    }

 

        //事件被暂停时执行一次

        public override void PauseEvent()

        {

            base.PauseEvent();

        }

 

        //事件继续播放时执行(有问题)

        public override void ResumeEvent()

        {

            base.ResumeEvent();

        }

 

        //事件被撤销时执行(有问题)

        public override void UndoEvent()

    {

        currentCurveSampleTime = 0.0f;

        Time.timeScale = prevTimeScale;

    }

}

}

对于每个事件,FireEventProcessEvent是必须要实现的,其他方法可选。

EndEventStopEventUndoEvent都最好实现以下,用来对FireEventProcessEvent进行逆操作因为剧情很大一部分事件都是在不运行游戏下执行,如果不执行逆操作,运行几遍后,整个场景就真的惨不忍睹,编辑不下去了。

八、制作一个小demo

新建一个场景,将Auto Play uSequence拖入场景,Ctrl+u 新建一个Sequence,将摄像机拖入



右击鼠标添加关键帧,进行编辑,完成摄像机的简单移动

 


九、热键 

Ctrl+U 打开

Ctrl+I 关闭

Alt+, 上一帧

Alt+. 下一帧

, 减0.01秒

. 加0.01秒

p 开始或暂停

S 停止

十、相关文章参考

文章一ttp://www.seven-fire.cn/archives/186

文章二http://www.seven-fire.cn/archives/199

文章三 http://blog.uwa4d.com/archives/Usequencer3.html

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
android:手势识别GestureDetector
XMPP 中客户端断线及网络异常处理
c# 只能输入数字的文本框
OrientationEventListener(方向事件監聽器)
在Unity中使用暂停的小技巧 | Unity3D教程手册
给 Android 开发者的 RxJava 详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服