当前位置: 首页 > wzjs >正文

公司网站设计很好的南宁优化推广服务

公司网站设计很好的,南宁优化推广服务,营销网站建设培训,手机上怎么自己设计房子这里认为大家已经会timeline的基本使用了,只介绍怎么自定义扩展。 第一步.自定义Track 首先要自定义一条轨道。剪辑是要在轨道里跑的,系统自带的轨道我们加不了自定义剪辑,得新建自己用的。这个很简单。 [TrackClipType(typeof(TransformTw…

这里认为大家已经会timeline的基本使用了,只介绍怎么自定义扩展。

第一步.自定义Track

首先要自定义一条轨道。剪辑是要在轨道里跑的,系统自带的轨道我们加不了自定义剪辑,得新建自己用的。这个很简单。

[TrackClipType(typeof(TransformTweenClip))] //关联的Clip类型
[TrackBindingType(typeof(GameObject))] //绑定的数据类型。
public class TestTrack1 : TrackAsset
{
}

编译过后就可以在Timeline的窗口里创建这个轨道了。后面再给这个轨道关联我们的自定义剪辑。

主要就是几个属性的作用需要了解一下。

[TrackClipType(type))]
指定关联的Clip类型,如果一个都没有,在Track上右键菜单里就没有可创建的clip。

[TrackBindingType(type))]
指定绑定的数据类型。这样在Track上会出现对象选择器,绑定的数据对象会作为playdata参数传递给我们(后面会看到)。

 

此外还有

[TrackColor(0,255,0)]轨道颜色 是0~255的值

第二步 创建Clip数据

Timeline窗口里编辑的是数据,这个就是定义Clip的数据。数据和逻辑分离的设计,很好理解。

public class TestClip1 : PlayableAsset
{public Transform trans;public Vector3 start;public Vector3 end;
}

记得用[TrackClipType(typeof(TestClip1))] 把它在TestTrack1上关联。

第三步 创建Clip的行为

public class TestClip1Behaviour : PlayableBehaviour
{public TestClip1 data;public override void ProcessFrame(Playable playable, FrameData info, object playerData){base.ProcessFrame(playable, info, playerData);data.trans.localScale = Vector3.Lerp(data.start, data.end, (float)(playable.GetTime() / playable.GetDuration()));//Clip上的当前时间/总时间}
}

还需要让数据和逻辑关联起来,Unity不知道TestClip1对应的是TestClip1Behaviour。Unity采取的办法是让我们在数据里的一个虚函数里创建逻辑对象并返回。TestClip1需要加一点代码。

public class TestClip1 : PlayableAsset
{public Transform trans;public Vector3 start;public Vector3 end;//增加的代码如下:public override Playable CreatePlayable(PlayableGraph graph, GameObject owner){return ScriptPlayable<TestClip1Behaviour>.Create(graph, new TestClip1Behaviour(){data = this});}
}

也很简单。

剪辑的行为对象在这个ScriptPlayable<T>里面,如果我们要获取其他剪辑行为对象,首先获取到的也是这个东西。通过T ScriptPlayable<T>.GetBehaviour()就可以获取到具体的行为对象了。这个后面做剪辑混合会用到。具体可以看手册。

编译结束后就可以去Timeline窗口里创建剪辑了。

小结

基本的剪辑扩展就完成了,功能都在Behaviour里。

一般会将控制的场景对象作为数据绑定传递到Clip和Mixer,作为字段放在Clip里会有引用丢失问题。

进阶一 ExposedReference<T>

需要注意的是,上面为了省事,TestClip1里直接把Transform声明为变量了。但是Timeline存储后是一种资源,资源是不能直接引用场景里的东西的,也就是说trans字段的引用对象不会保存到对象。这里可以通过关闭场景然后再次打开来验证,Timeline文件上引用的场景对象会丢失。

为了解决这个问题,unity搞了个ExposedReference<T>类型来实现对场景里的东西引用。估计是用路径查找实现的,具体就没去翻了。只需要将定义改成这样就行了:

public ExposedReference<Transform> trans;//获取真正trans对象的代码为:
//trans.Resolve(playable.GetGraph().GetResolver())

详情可以看这里:

【Unity学习笔记】ExposedReference类的初识 + 自定义Timeline轨道初识-CSDN博客

进阶二 剪辑混合

剪辑混合是一条Track里的多个剪辑发生过渡时,根据各个剪辑的权重用户自己算出一个最终的值。这个过程Unity不会自动做,要撸代码。注意混合是Track层面的事情,不是Clip里的事,要遍历多个Clip来计算。

总共可分两步。第一步创建混合行为代码。

public class TestTrack1Mixer : PlayableBehaviour
{public override void ProcessFrame(Playable playable, FrameData info, object playerData){base.ProcessFrame(playable, info, playerData);var inputCount = playable.GetInputCount();var scale = Vector3.zero;for(int i = 0; i < inputCount; i++){var scriptPlayable = (ScriptPlayable<TestClip1Behaviour>)playable.GetInput(i);var bhv = scriptPlayable.GetBehaviour();//如果不是TestClip1Behaviour,这里会返回null。设计时注意即可。float weight = playable.GetInputWeight(i);//Behaviour是在包含它的ScriptPlayable<T>里跑的,时间从scriptPlayable这个变量获取,而不是函数传入的playable变量scale += weight * Vector3.Lerp(bhv.data.start, bhv.data.end, (float)(scriptPlayable.GetTime() / scriptPlayable.GetDuration()));}//这里用了playerData,就是[TrackBindingType(typeof(GameObject))] 绑的var go = playerData as GameObject;go.transform.localScale = scale;}
}

这里混合后最后控制的对象是playerData传入的。从遍历到的TestClip1Behaviour上取也行,但是不如这样方便。

第二步在Track1Asset里创建这个混合器。

[TrackClipType(typeof(TransformTweenClip))] //关联的Clip类型,如果一个都没有,在Track上右键菜单里就没有可创建的clip。
[TrackBindingType(typeof(GameObject))] //绑定的数据类型。
public class TestTrack1 : TrackAsset
{//新增的代码public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount){return ScriptPlayable<TestTrack1Mixer>.Create(graph, inputCount);}
}

进阶三 自定义信号

继承自SignalEmitter就行了。

public class TestSignal : SignalEmitter
{public string arg;
}

编译通过后,Timeline编辑器里就会显示自己的信号。

既然已经自定义信号了,那么也得自定义一个信号接收器了,自带的信号接收器SignalReceiver不能处理自定义信号。代码如下,也很简单。

public class TestSignalReceiver : MonoBehaviour, INotificationReceiver
{public void OnNotify(Playable origin, INotification notification, object context){var s = notification as TestSignal;Debug.Log(s.arg);}
}

系统自带的信号发送和接收,相当于就是把一个资源文件作为信号参数传递,然后根据信号参数调用对应处理函数,大多数情况下用系统自带的就够用了。

参考

Timeline:实用指南


文章转载自:

http://5xM9bdIe.kjmcq.cn
http://Pcgnw3Ga.kjmcq.cn
http://cVusajjk.kjmcq.cn
http://NlRqFXnC.kjmcq.cn
http://FnLnsXQq.kjmcq.cn
http://K9DkjrTE.kjmcq.cn
http://A5nvl4Pz.kjmcq.cn
http://uejgyrxY.kjmcq.cn
http://1vdouPtQ.kjmcq.cn
http://Ps3OQhrT.kjmcq.cn
http://nuRVpwjf.kjmcq.cn
http://JWvosswT.kjmcq.cn
http://ueVJ2m3d.kjmcq.cn
http://uRVmdyB4.kjmcq.cn
http://AQ07cVRh.kjmcq.cn
http://SMuh3pB5.kjmcq.cn
http://r77eQ41Z.kjmcq.cn
http://YSMDTJmV.kjmcq.cn
http://FZmR1DrY.kjmcq.cn
http://uAgDMIwi.kjmcq.cn
http://lFG3FYTV.kjmcq.cn
http://TsRJzI16.kjmcq.cn
http://F3eZurpW.kjmcq.cn
http://v1CrgGzc.kjmcq.cn
http://0L2sAaol.kjmcq.cn
http://HGe6TQ99.kjmcq.cn
http://nOiO6NyU.kjmcq.cn
http://ob3Ujk4k.kjmcq.cn
http://AxAa5R24.kjmcq.cn
http://Oa5AvkFD.kjmcq.cn
http://www.dtcms.com/wzjs/643913.html

相关文章:

  • 网站开发与维护视频诸暨建设局网站
  • 金坛区住房城乡建设局网站什么是所见即所得的网页制作工具
  • 网站建设网站优化相关资讯文章网络营销推广的主要形式为
  • 做网站的书网络推广可做哪些方面
  • 网站开发费应该入什么科目一个好网站建设
  • 山亭 网站建设wordpress菜单图标美化
  • 临沂网站建设wyjzgzs专业vi机构
  • 邯郸网站建设哪儿好小说网站开发技术实现
  • 网站被拔毛的原因成都双流兴城建设投资有限公司网站
  • 学网站开发多久杭州网站建设方案服务公司
  • 建网站的软件 优帮云江宁网站建设价格
  • 国内做视频的网站部门网站管理建设工作汇报
  • 免费的网站域名查询浏览器做漫画网站空间多大
  • 对招聘公司做评价的网站微信如何做微商城网站建设
  • 电子加工东莞网站建设dw软件主要做什么
  • 曲阜做网站哪家好12网站免费建站
  • 彩票网站怎么建设微信网站用什么制作的
  • 网站建设 盘网互联wordpress格子主题
  • vs2017手机网站开发附近最好的装修公司
  • 网站被泛解析高端制作网站公司
  • 设计网站都有什么作用是什么qq群排名优化软件
  • 网站流量数据分析怎么做部队网站模板jsp
  • 门户网站开发是什么mssql网站开发
  • 做五金国际网站哪个好seo岗位工资
  • 软件开发商网站萍乡网站建设哪家好
  • 常见网站安全漏洞农村做网站赚钱
  • 中国能建平台网页seo优化
  • 怎么免费做一个网站网页升级访问紧急通知
  • 网站内容建设评估网站建设源代码版权问题
  • asp商业网站源码网站服务器 重启