如何在运行时更改补间动画的 endValueString?
How to change the endValueString for tween animations at runtime?
我正在使用 DOTween pro asset from the Unity store along with the textmeshpro。附件是显示我的设置的屏幕截图:
我的场景中收藏品很少;我希望能够在每次收集物品时 运行 动画和不同的文本。
下面是我的代码片段:
DOTweenAnimation[] animations = pickUpTexts.GetComponents<DOTweenAnimation>();
for(int i=0;i< animations.Length; i++)
{
Debug.Log("animations " + animations[0].animationType);
if (animations[i].animationType == DOTweenAnimationType.Text)
{
textAnimation = animations[i];
}
if (animations[i].animationType == DOTweenAnimationType.Move)
{
moveAnimation = animations[i];
}
}
稍后收集物品时,我称此为:
textAnimation.endValueString = "New pick up collected, blah blah";
//textAnimation.DOPlay();
textAnimation.DORestart();
基本上,我试图用新值更改动画的 endValueString
和 re-run 动画。收集拾取时,我可以在检查器中看到 endValueString
正在更新,但 Tween 仍在播放(或不播放)相同的旧值。显示更新的屏幕截图如下所示:
我尝试使用 Restart/Play 进行更改,关闭组件的自动终止选项,尝试更改检查器中的循环计数器,尝试使用 textAnimation.DORestart(true)
但似乎没有任何效果。
到目前为止我找到的解决方案是不使用动画组件,因为它不是 re-usable,只需在我的脚本中使用以下行:
pickUpTexts.GetComponent<TextMeshProUGUI>().DOText("New pick up collected, blah blah", 1f, true).SetRelative(true)
您不能更改 DOTweenAnimation 的结束值,但可以使用 ChangeEndValue:
更改它生成的补间的结束值
// myDOTweenAnimation indicates a reference to the DOTweenAnimation component
myTween = myDOTweenAnimation.GetTweens()[0];
myTween.ChangeEndValue("something else");
旁注:我是 OP 使用的工具的开发者。
虽然@Demigiant 的回答是正确的,但在版本:
DOTween v1.2.335 [发布版本]
DOTweenPro v1.0.178
需要强制转换,因为它 returns 一个未实现 ChangeEndValue 方法的 Tween 对象。
因此,要使其按预期工作,您需要先将其转换为 Tweener:
// myDOTweenAnimation indicates a reference to the DOTweenAnimation component
myTween = myDOTweenAnimation.GetTweens()[0];
((Tweener)myTween).ChangeEndValue("something else");
PS。我无法评论它,因为我没有足够的声誉。一旦正确答案得到修复,就可以将其删除。
我正在使用 DOTween pro asset from the Unity store along with the textmeshpro。附件是显示我的设置的屏幕截图:
我的场景中收藏品很少;我希望能够在每次收集物品时 运行 动画和不同的文本。
下面是我的代码片段:
DOTweenAnimation[] animations = pickUpTexts.GetComponents<DOTweenAnimation>();
for(int i=0;i< animations.Length; i++)
{
Debug.Log("animations " + animations[0].animationType);
if (animations[i].animationType == DOTweenAnimationType.Text)
{
textAnimation = animations[i];
}
if (animations[i].animationType == DOTweenAnimationType.Move)
{
moveAnimation = animations[i];
}
}
稍后收集物品时,我称此为:
textAnimation.endValueString = "New pick up collected, blah blah";
//textAnimation.DOPlay();
textAnimation.DORestart();
基本上,我试图用新值更改动画的 endValueString
和 re-run 动画。收集拾取时,我可以在检查器中看到 endValueString
正在更新,但 Tween 仍在播放(或不播放)相同的旧值。显示更新的屏幕截图如下所示:
我尝试使用 Restart/Play 进行更改,关闭组件的自动终止选项,尝试更改检查器中的循环计数器,尝试使用 textAnimation.DORestart(true)
但似乎没有任何效果。
到目前为止我找到的解决方案是不使用动画组件,因为它不是 re-usable,只需在我的脚本中使用以下行:
pickUpTexts.GetComponent<TextMeshProUGUI>().DOText("New pick up collected, blah blah", 1f, true).SetRelative(true)
您不能更改 DOTweenAnimation 的结束值,但可以使用 ChangeEndValue:
更改它生成的补间的结束值// myDOTweenAnimation indicates a reference to the DOTweenAnimation component
myTween = myDOTweenAnimation.GetTweens()[0];
myTween.ChangeEndValue("something else");
旁注:我是 OP 使用的工具的开发者。
虽然@Demigiant 的回答是正确的,但在版本:
DOTween v1.2.335 [发布版本] DOTweenPro v1.0.178
需要强制转换,因为它 returns 一个未实现 ChangeEndValue 方法的 Tween 对象。
因此,要使其按预期工作,您需要先将其转换为 Tweener:
// myDOTweenAnimation indicates a reference to the DOTweenAnimation component
myTween = myDOTweenAnimation.GetTweens()[0];
((Tweener)myTween).ChangeEndValue("something else");
PS。我无法评论它,因为我没有足够的声誉。一旦正确答案得到修复,就可以将其删除。