Slate轨道工具使用(三)—位置还原问题修复

问题描述

Cutscene 使用时,有一个最大的问题,就是当Cutscene 循环播放时,会在第二次播放将actor 置为最初位置,而且无法关闭,

播放中
在这里插入图片描述
拉到左侧
在这里插入图片描述
播放完毕,回到最初位置
在这里插入图片描述

解决办法(一 )推荐

在官方没有解决方案的情况下,经过测试有两个办法可以解决Cutscene 重复播放位置还原问题

在播放Cutscene 的Action 脚本中使用Update 去修改位置

设置播放模式为 手动
在这里插入图片描述
在Update 使用设置时间的方式去播放Cutscene , 时间这里取Unity的增量时间,设置Cutscene使用Sample, CurrentTime 无法播放

time += Time.deltaTime;
//防止循环Cutscene 拉回原点
//_cutscene.currentTime = time % _cutscene.length; 无法播放
if (isLoopCutscene)
{
_cutscene.Sample(time % _cutscene.length);
}
 else
{
_cutscene.Sample(time);
}

此方法Cutscene Loop 只会进入一次Enter

解决办法(二)

第二个办法不推荐使用,经过测试可以在Cutscene Enter读取位置来实现,不过直接取Actor 的 position 是无法成功的,要将Actor 的Position存在第三方位置,然后从Cutscen 内部的Clip读取,

actor.transform.position = FsmStateExtensions.RolePosition;

例如:使用静态 Vector3 ,位置改变存入,Enter 读取,

弊端,每一个Actor 都需要一个新对象/静态 读写存储位置,比较麻烦,不推荐使用

此方法Cutscene Loop 会反复进入 Enter

解决方案(三)

第三个方案主要是解决Cutscene销毁时出现的位置拉回,这个问题不是一定会出现,当Cutscene 没有定义停止模式,直接销毁时,会有概率发生拉回原点,原因是因为直接销毁之前没有调用Stop 会采用默认的stop Rewind,即还原开始的位置

因此在检查脚本执行顺序,要在Gameobject.Destory之前先调用Stop

Cutscene.Stop() //采用Cutscene 面板的停止方式
Cutscene.Stop(StopMode) //指定一种停止方式

Stop源码
在这里插入图片描述
还可以修改Stop的默认 改为Skip / SkipRewindNoUndo , 这样做只是避免忘记Stop时,预防措施,还是要检查脚本执行顺序,确保在Destory之前先Stop
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值