欢迎光临散文网 会员登陆 & 注册

Unity学习笔记11影视内容创作

2021-12-01 09:43 作者:挽秋_z  | 我要投稿

影视内容创作

时间轴

实时动画片创作

1,游戏引擎被称为内容创作引擎

2,实时真实感光照效果、实时物理等特效的仿真

3,友好、灵活的创作工具

4,自然实现 VR 效果

时间轴和动画控制的区别

timeline用来生成各种动画效果,Cinemachine用来灵活的控制虚拟摄像机

1,animation只能控制单个物体,而timeline可以使得多个物体协同运动(比如在播放动画的时候,timeline可以

控制发出对应的声音,播放特定的粒子系统特效,进行摄像机跟随等)。

2,在timeline中可以有多个轨道,每个轨道上面也可以包含多个片段(这些片段可以移动,剪切,或者他们之间

进行融合)。

3,timeline加入Unity的时间要晚于animation。

简单实践

windows窗口-->Sequencing-->timeline。新建一个空物体,为其创建一个timeline。

将需要timeline控制的物体拖拽到timeline窗口中,选择需要的控制方式。

点击三个点可以添加动画片段等

在时间轴上可以通过直接拖拽的方式来控制动画片段的播放。


简单动画

时间轴的工作流

1,创建时间轴资源和时间轴实例

2,使用无限片段录制动画(录制对象为游戏物体)

3,(录制完成后)将无限片段转换为动画片段

简单实践

Animation Track 动画轨道

点击红色录制按钮,然后会开始录制选中的物体


选中对应的物体后,右键可以为其位置,旋转等添加关键帧


添加后


拖动关键帧的位置,选中位置或者旋转,直接拖拽场景中的物体,录制完成后运行游戏测试效果。

右键有一个Convert  To  Clip  Track 选项

就是把录制好的动画转换为动画片段。

Activation  Track 激活轨道,可以让摄像机在特定的时间处于激活状态。(默认情况是主摄像机处于激活状态)

新建两个摄像机,分别对着两个物体,拖拽到timeline中,选择激活轨道

角色动画

timeline也可以控制角色动画

角色动画的特殊性

1,角色动画使用骨架动画

2,在动画片段之间容易产生问题(比如角色在运动时,走路到跑步动画的转换之间可能会出现问题,位置不对应

等)

3,可以使用一些特殊效果(比如使用动画遮罩来嫁接不同身体部位的动画)

简单实践

新建一个场景,创建timeline,


移除角色的控制脚本,


移除后


现在角色的运动不再由脚本来控制,可以通过timeline来控制。

为角色添加几个动画


如果移动角色的位置,希望在其他地方播放角色动画,这时角色会自己移动回来,因为此时的控制权已经在

timeline上,如果要移动,需要选中动画,


点击十字图标进行移动,这时的变换才会反映到timeline中。

如果希望动画是连续播放的,需要选中后面的动画右键,选择Match Offsets  To  Previous  Clip 即可。

在timeline上进行动画的融合:选中动画向前移动即可


,经过动画的融合,使角色的动作看起来更加的自然。

如果存在滑步现象,还可以对动画进行微调,用鼠标滚轮可以放大timeline时间轴,拖动播放来进行观察,选中动

画片段,在存在滑步现象的地方选中十字图标进行调整角色的位置。(也可以直接修改图标下面的数值进行定量的

微调)。

新建一个角色,拖拽到timeline中后,添加一段动画,然后右键选择Add  Override Track(替换性的轨道),该

轨道上面的动画会替换掉原轨道上面的动画。一般不会武器替换,选择替换轨道,需要给角色加一个遮罩Avatar

Mask,来决定替换哪些部位。



比如下面这个,上半身是弯腰走路,下半是正常走路


可以建立分组,便于管理


分组


右键轨道可以锁定,静音(Mute)等操作。

脚本控制

常见的轨道Track

Animation Track  物体的动画控制

Audio Track  音频轨道(可以控制音频,添加声音在上面)

Activation  Track  激活轨道(控制物体的激活与否)

Control Track 控制轨道(控制游戏物体的时间相关的内容,可以从一个timeline改变另一个timeline。为父物体

实例化一个预制件,比如添加粒子效果)

自定义轨道Playable Track

1,Playable Track 允许用户自定义相关动画效果

2,可以根据自己的需要进行定制化的开发

3,在代码中继承PlayableBehaviour和PlayableAsset两个类,在其中完成自定义的动画功能

使用Unity实现时间轴的脚本控制

控制轨道可以对其他的timeline进行控制,右键控制轨道


在此添加要控制的其他timeline。

Rigbody中的 Is Kinematic 是否开启动力学,开启此项,物体不受力的作用

挂接了timeline的物体,默认载入时就会直接播放,也可以通过脚本来控制。

新建一个脚本和空物体Controller,将脚本挂接上去

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;//需要添加

public class Timeline_Controller : MonoBehaviour
{
   [SerializeField]//可序列化的,这样tl_event就可以在unity界面中开放出来被赋值了
   public UnityEvent tl_event;
   // Start is called before the first frame update
   void Start()
   {
       
   }

   // Update is called once per frame
   void Update()
   {
       if(Input.GetKeyDown(KeyCode.Space))
       {
           tl_event.Invoke();//如果用户按下空格键,invoke触发
       }
   }
}

将需要被控制的timeline拖拽上去,然后添加需要控制的事件


然后需要将被控制的timeline的play  On Awake 勾选掉(不会自动播放)。

新建脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using UnityEngine.Playables;
using UnityEngine.UI;

public class MyPlayableAsset : PlayableAsset
{
   public ExposedReference<Text> myText;//用来显示一些信息
   //override 是指虚函数
   public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
   {
       var playable = ScriptPlayable<MyPlayableBehaviour>.Create(graph);
       //MyPlayableBehaviour 是一个自定义的类
       playable.GetBehaviour().status = myText.Resolve(graph.GetResolver());
       //GetBehaviour 得到其行为
       return playable;
   }
}

public class MyPlayableBehaviour : PlayableBehaviour
{
   public Text status;
   public override void OnBehaviourPlay(Playable playable, FrameData info)
   {
       base.OnBehaviourPlay(playable, info);
       if(status!=null)
       {//如果文本内容不为空
           status.gameObject.SetActive(true);
           status.text = "Playing";
       }
   }
   public override void OnBehaviourPause(Playable playable, FrameData info)
   {
       if (status != null)
       {
           status.text = "End playing";
       }
       base.OnBehaviourPause(playable, info);
   }
}

在timeline上的自定义轨道上添加


然后建立一个Text放上去


运行游戏可以看到,播放时文本是Playing   播放完成后是End playing

Cinemachine

作用

1,过程化的游戏内摄像机自动控制系统

2,用于游戏过场动画,影视化效果,实时动画

3,特别适合于需要镜头调度的场合

使用Cinemachine的便利性

1,解决了摄像机控制所需要的复杂数学和逻辑计算

2,摄像机控制会自动反应对场景内容的修改

3,适用于各种游戏类型

4,和其他的Unity工具配合紧密

简单实践

先导入该包,才可使用


建立一个基础的场景和一个小动画


添加一个


在其属性界面中,添加跟随和观察的物体


将主摄像机添加到时间轴上,选择Cinemachine track类型,然后如图


添加后在属性界面将刚才的Cinemachine添加上去


拖动时间轴可以看到摄像机的效果。


再在场景中添加一个虚拟摄像机(这个是推拉摇移轨道式camera)


通过路径点来决定其轨道,在其属性界面可添加路径点


在其属性界面


将这个Enable勾选,镜头就会自动的推拉摇移,也需要为其添加跟随和观察的物体


然后将这个Cinemachine同样添加到时间轴上,拖动时间轴即可看到效果。

和动画一样,对二者进行融合,使其转换看起来更自然














Unity学习笔记11影视内容创作的评论 (共 条)

分享到微博请遵守国家法律