前言
我们经常会看到游戏中有很多“花里胡哨”的系统,比如这样:
火影忍着疾风传
<img src="https://pic4.zhimg.com/v2-87adf4f3d8705affb3e377b922f753cb_b.gif" data-rawwidth="385" data-rawheight="313" data-thumbnail="https://pic4.zhimg.com/v2-87adf4f3d8705affb3e377b922f753cb_b.jpg" class="content_image" width="385">
碧之轨迹S技能
<img src="https://pic2.zhimg.com/v2-c697ae10f45d24c167d11f5d8c167849_b.gif" data-rawwidth="436" data-rawheight="326" data-thumbnail="https://pic2.zhimg.com/v2-c697ae10f45d24c167d11f5d8c167849_b.jpg" class="origin_image zh-lightbox-thumb" width="436" data-original="https://pic2.zhimg.com/v2-c697ae10f45d24c167d11f5d8c167849_r.gif">
这种效果感觉上像播放视频一样,但是却能将游戏不同的敌人加到镜头里面,有时候甚至根据双方关系还会有不同的反馈。如果是做视频或者全部由脚本来控制,实在是太难表现了。
我们玩游戏也经常会遇到这样的过程,到达某个剧情点的时候进入一段过场动画:
最终幻想
<img src="https://pic2.zhimg.com/v2-001b6f269714c438f637b2438154a471_b.gif" data-rawwidth="427" data-rawheight="311" data-thumbnail="https://pic2.zhimg.com/v2-001b6f269714c438f637b2438154a471_b.jpg" class="origin_image zh-lightbox-thumb" width="427" data-original="https://pic2.zhimg.com/v2-001b6f269714c438f637b2438154a471_r.gif">
因此引出我们这篇内容的主角——TimeLine
关于Timeline
Timeline是Unity2017推出的电影序列工具,有助于设计师们更加方便地编辑影片中的动作、声音、事件、视频等等。Timeline无需编写代码,所有操作仅需通过“拖拽”即可完成,从而让设计师们可以更加专注于剧情与故事讲述,加快制作流程。
本篇将会先从实现简单的剧情对话入手,将会用到几乎所有的TimeLine组件,让大家对这个功能有个基础的认知,而在下一节将会用TimeLine实现特写的对战效果。
Timeline实现剧情效果
动画控制
首先得有一个Timeline的组件
<img src="https://pic3.zhimg.com/v2-7e3bce185a2e5f98fee2fab4e8f6e8c2_b.png" data-rawwidth="540" data-rawheight="660" class="origin_image zh-lightbox-thumb" width="540" data-original="https://pic3.zhimg.com/v2-7e3bce185a2e5f98fee2fab4e8f6e8c2_r.png">
然后给Timeline点击添加一个动画控制
<img src="https://pic1.zhimg.com/v2-0ba844b0837319463f1a7cf34c3e7924_b.png" data-rawwidth="554" data-rawheight="121" class="origin_image zh-lightbox-thumb" width="554" data-original="https://pic1.zhimg.com/v2-0ba844b0837319463f1a7cf34c3e7924_r.png">
这里需要把场景里面的带有Animator组件的物体拖到Track上,这里必要的说明一下,Timeline并不需要动画控制器中的动画状态,那怕空的资源也是可以的。如果是空的Animator组件,可以点击红色录制按钮,像操作动画Animation动画一样的制作动画。
<img src="https://pic2.zhimg.com/v2-de6755564f2b6ef0dc4660d44c236c09_b.png" data-rawwidth="505" data-rawheight="571" class="origin_image zh-lightbox-thumb" width="505" data-original="https://pic2.zhimg.com/v2-de6755564f2b6ef0dc4660d44c236c09_r.png">
我们可以右键添加动画Clip,这里的资源是在工程中的。同时添加的动画可以在Timeline中做混合处理
<img src="https://pic4.zhimg.com/v2-013dd3963e29809c8afab66c40fa4bdf_b.png" data-rawwidth="554" data-rawheight="185" class="origin_image zh-lightbox-thumb" width="554" data-original="https://pic4.zhimg.com/v2-013dd3963e29809c8afab66c40fa4bdf_r.png">
添加后直接播放的效果:
<img src="https://pic3.zhimg.com/v2-ef68387e58852f71ddf1e967fef8315a_b.gif" data-rawwidth="530" data-rawheight="602" data-thumbnail="https://pic3.zhimg.com/v2-ef68387e58852f71ddf1e967fef8315a_b.jpg" class="origin_image zh-lightbox-thumb" width="530" data-original="https://pic3.zhimg.com/v2-ef68387e58852f71ddf1e967fef8315a_r.gif">
Timeline动画功能搞定~
脚本自定义控制
我们还可以自定义脚本:
<img src="https://pic1.zhimg.com/v2-4a2d7e4bd112e86ece6511af970378f8_b.png" data-rawwidth="360" data-rawheight="213" class="content_image" width="360">
然后创建一个 PlayableBehaviour类型的脚本
<img src="https://pic1.zhimg.com/v2-4a028c6623f2830c4642e47f9dac935c_b.png" data-rawwidth="531" data-rawheight="230" class="origin_image zh-lightbox-thumb" width="531" data-original="https://pic1.zhimg.com/v2-4a028c6623f2830c4642e47f9dac935c_r.png">
脚本内容如下,主要注意得通过Resolve(playable.GetGraph().GetResolver())方法去获得Timeline传入的值。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;
using UnityEngine.UI;
public class NewPlayableAsset : BasicPlayableBehaviour
{
[Header("对话框")]
public ExposedReference<Text> dialog;
private Text _dialog;
[Multiline(3)]
public string dialogStr;
public override void OnGraphStart(Playable playable)
{
_dialog = dialog.Resolve(playable.GetGraph().GetResolver());
}
public override void OnBehaviourPlay(Playable playable, FrameData info)
{
_dialog.gameObject.SetActive(true);
_dialog.text = dialogStr;
}
public override void OnBehaviourPause(Playable playable, FrameData info)
{
if (_dialog)
{
_dialog.gameObject.SetActive(false);
}
}
}
然后和动画一样插入Track后可以看到下方的属性是我们可以编辑的了。
&amp;amp;lt;img src="https://pic4.zhimg.com/v2-6aa51de00330bdf29befe6085eed9437_b.png" data-rawwidth="317" data-rawheight="458" class="content_image" width="317"&amp;amp;gt;
做一个文本变换的效果:
&amp;amp;lt;img src="https://pic3.zhimg.com/v2-97a8e4f4965174078dbf3d325819deae_b.gif" data-rawwidth="600" data-rawheight="553" data-thumbnail="https://pic3.zhimg.com/v2-97a8e4f4965174078dbf3d325819deae_b.jpg" class="origin_image zh-lightbox-thumb" width="600" data-original="https://pic3.zhimg.com/v2-97a8e4f4965174078dbf3d325819deae_r.gif"&amp;amp;gt;
脚本自定义功能也完成~
触发机制
之后修改成条件触发判定,不在是直接播放游戏就开始运行
&amp;amp;lt;img src="https://pic3.zhimg.com/v2-a53a1a8a9f7ca128f81e1cb44613865a_b.png" data-rawwidth="309" data-rawheight="159" class="content_image" width="309"&amp;amp;gt;
做了一个触发的脚本功能
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Timeline;
using UnityEngine.Playables;
public class StoryControl : MonoBehaviour
{
public bool isTrigger;
public GameObject ui_tip;
public PlayableDirector playableDirector;
public void OnTriggerEnter(Collider other)
{
if (other.gameObject.name == "Trigger")
{
ui_tip.gameObject.SetActive(true);
isTrigger = true;
}
}
public void OnTriggerExit(Collider other)
{
if (other.gameObject.name == "Trigger")
{
ui_tip.gameObject.SetActive(false);
isTrigger = true;
}
}
public void Update()
{
if (isTrigger)
{
if (Input.GetKeyDown(KeyCode.E))
{
playableDirector.Play();
}
}
}
}
之后我们可以运行看效果了:
&amp;amp;lt;img src="https://pic2.zhimg.com/v2-43e2cb6078c9e85de4eb4019033c0f8d_b.gif" data-rawwidth="600" data-rawheight="554" data-thumbnail="https://pic2.zhimg.com/v2-43e2cb6078c9e85de4eb4019033c0f8d_b.jpg" class="origin_image zh-lightbox-thumb" width="600" data-original="https://pic2.zhimg.com/v2-43e2cb6078c9e85de4eb4019033c0f8d_r.gif"&amp;amp;gt;
镜头控制和物体激活控制
最后还有一个Cinemachine插件和Timeline的结合(Cinemachine的作者投靠了Unity),这个插件可以在AssetStore上免费下载。
首先添加
&amp;amp;lt;img src="https://pic1.zhimg.com/v2-0d24c85965f09cc9273d0f5ee71e7170_b.png" data-rawwidth="565" data-rawheight="223" class="origin_image zh-lightbox-thumb" width="565" data-original="https://pic1.zhimg.com/v2-0d24c85965f09cc9273d0f5ee71e7170_r.png"&amp;amp;gt;
创建摄像机后设置,具体Cinemachine的功能这里不多介绍了,一款非常不错的专业摄像机控制插件。
&amp;amp;lt;img src="https://pic2.zhimg.com/v2-2272f6cc6e9af61ac9f50eb77ada5c19_b.png" data-rawwidth="285" data-rawheight="383" class="content_image" width="285"&amp;amp;gt;
顺便将主角屏蔽掉,通过ActivationTrack的功能
&amp;amp;lt;img src="https://pic1.zhimg.com/v2-13e9543719be673da107a1215790e7c0_b.png" data-rawwidth="600" data-rawheight="75" class="origin_image zh-lightbox-thumb" width="600" data-original="https://pic1.zhimg.com/v2-13e9543719be673da107a1215790e7c0_r.png"&amp;amp;gt;
最后是这样的效果
&amp;amp;lt;img src="https://pic2.zhimg.com/v2-c952bb48294b7aad57339cd548a1a551_b.gif" data-rawwidth="600" data-rawheight="416" data-thumbnail="https://pic2.zhimg.com/v2-c952bb48294b7aad57339cd548a1a551_b.jpg" class="origin_image zh-lightbox-thumb" width="600" data-original="https://pic2.zhimg.com/v2-c952bb48294b7aad57339cd548a1a551_r.gif"&amp;amp;gt;
总结
现在网上的教学资源较少,可以在http://edu.csdn.net/huiyiCourse/detail/453 看看直播。
我这里下载Timeline_Market的Demo资源,链接在下面,有兴趣的朋友可以下载来研究研究
http://pan.baidu.com/s/1c17OMTM 密码:s9s1
&amp;amp;lt;img src="https://pic3.zhimg.com/v2-682515532ffb60e2711f2d984ababe6a_b.gif" data-rawwidth="702" data-rawheight="391" data-thumbnail="https://pic3.zhimg.com/v2-682515532ffb60e2711f2d984ababe6a_b.jpg" class="origin_image zh-lightbox-thumb" width="702" data-original="https://pic3.zhimg.com/v2-682515532ffb60e2711f2d984ababe6a_r.gif"&amp;amp;gt;
官网:http://levelpp.com/
游戏开发技术交流群:610475807
微信公众号:皮皮关
暂无关于此日志的评论。