我正在尝试Time.timescale使用DOTween的缓动功能制作动画。
补间值本身似乎有效:
DG.Tweening.DOTween.To(value => Time.timeScale = value, 1, 0, 0.4f);
但是文档中提到的所有SetX()方法在返回的对象上均不可用,尽管我发现可以设置该timeScale属性,但似乎没有任何方法可以使用缓动函数来进行补间。
我想念什么?
我正在使用Unity商店中的DOTween pro资产以及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];
}
}
Run Code Online (Sandbox Code Playgroud)
以后收集项目时,我称之为:
textAnimation.endValueString = "New pick up collected, blah blah";
//textAnimation.DOPlay();
textAnimation.DORestart();
Run Code Online (Sandbox Code Playgroud)
基本上,我正在尝试更改endValueString动画并使用新值重新运行动画.收集拾取后,我可以endValueString在检查器中看到正在更新,但补间仍在播放(或不播放)相同的旧值.显示更新的屏幕截图如下所示:
我尝试使用重新启动/播放更改,关闭组件的自动杀戮选项,尝试更改检查器中的循环计数器,尝试使用textAnimation.DORestart(true)但似乎没有任何工作.
到目前为止我找到的解决方案是不使用动画组件,因为它不可重复使用,只需在我的脚本中使用以下行:
pickUpTexts.GetComponent<TextMeshProUGUI>().DOText("New pick up collected, blah blah", 1f, true).SetRelative(true)
Run Code Online (Sandbox Code Playgroud) DOTween.Kill api 返回实际被杀死的补间数。但是使用这个 api 不能杀死转换的序列补间。
DOTween.Kill (this); 或 DOTween.Kill(转换);或 DOTween.Rewind api 都不能杀死它。
使用Unity的dotween库:http://dotween.demigiant.com/documentation.php
并在C#上生锈...
有没有办法将函数内联指定为.OnComplete的参数,以便我们不必在单独的函数中切断一系列动作?
即我想在ObjC中使用称为块的功能,但在C#中.
啰嗦一种不直观的方式:
void myCallback () {
// do more stuff here
}
void mysequence() {
transform.DOMoveX(4, 1).OnComplete(myCallback);
}
Run Code Online (Sandbox Code Playgroud)
我想做的更容易阅读和保持原则:
void mysequence() {
transform.DOMoveX(4, 1).OnComplete({
// do more stuff here
});
}
Run Code Online (Sandbox Code Playgroud) 我现在正在处理 Unity 项目,并且 VSCode 中出现错误消息。
“Transform”不包含“DOMove”的定义,并且最佳扩展方法重载“DOTweenModulePhysics2D.DOMove(Rigidbody2D, Vector2, float, bool)”需要“Rigidbody2D”类型的接收器
using DG.Tweening;
using UnityEngine;
public class Mover : MonoBehaviour
{
void Start()
{
this.gameObject.transform.DOMove(new Vector3(1,2,3), 1);
}
}
Run Code Online (Sandbox Code Playgroud)
当我在 VSCode 中键入 DOMove 时,该方法的自动完成功能不会显示。我尝试将 Demigiant 文件夹从插件移动到主资源目录中,然后将其移回并重新启动 Unity,但我仍然遇到相同的错误...
我有数据列表,我想按顺序对其进行补间。如果我对每个补间都放一个延迟,它将不起作用。我试图实现的是在下一个序列之前插入延迟。
private IEnumerator<float> _CameraTransition()
{
var camSequence = DOTween.Sequence();
for (int i = 0; i < CamerasData.Count; i++)
camSequence.Append(cam.DOFieldOfView(CamerasData[i].fov, CamerasData[i].duration).SetDelay(CamerasData[i].triggerDelay));
camSequence.Play();
yield return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我删除SetDelay它可以正常工作,但是当然不会延迟