Unity UI 元素移动动画使用iTween
Unity UI Elements Move Animation Using iTween
我使用 iTween 为每个主菜单元素提供动画。
但是动画并没有按照愿望播放,不同的是 运行 所以我对这个问题感到困惑以寻求解决方案。
我想播放游戏标题,使用 iTween 移动动画将动画从 1200 单位移动到 0 单位。但是像这样,我得到了一个结果——它在 -540 个单位上停止了:
这种代码,我为UI写过图片移动动画:
iTween.MoveTo (ballTitleObj, iTween.Hash ("x", 0f, "speed", 100f, "delay", 1f));
我知道 iTween 与 Transform 组件一起工作,UI 元素与 RectTransform 一起工作,但我需要做什么来解决这个问题?
好的,现在花足够的时间来解决这个问题,我至少找到了一个解决方案。
我开始使用 DOTween 而不是 iTween:
DOTween - Documentation
它内置包含对 Unity UI 动画的支持,我可以在项目中轻松实现。这是对我有用的代码行:
ballTitle.DOAnchorPosX (0f, 1f, false).SetDelay (0.5f).SetEase(Ease.OutBack);
首先获取标题的RectTransform
:
this.titleRectTransform = ballTitleObj.GetComponent<RectTransform>();
然后,调用iTween.ValueTo
,因为你不想改变变换,你需要改变RectTransform
。
iTween.ValueTo(ballTitleObj, iTween.Hash(
"from", this.titleRectTransform.anchoredPosition,
"to", new Vector2(0, this.titleRectTransform.anchoredPosition.y),
"speed", 100f,
"delay", 1f,
"onupdatetarget", this.gameObject,
"onupdate", "MoveBallTitle"));
}
并且在您调用 iTween.ValueTo
的同一个 class 中,您需要定义一个 MoveBallTitle
方法来更新 anchoredPosition:
public void MoveBallTitle(Vector2 position){
this.titleRectTransform.anchoredPosition = position;
}
此答案基于 this answer Unity 问答网站
我使用 iTween 为每个主菜单元素提供动画。 但是动画并没有按照愿望播放,不同的是 运行 所以我对这个问题感到困惑以寻求解决方案。
我想播放游戏标题,使用 iTween 移动动画将动画从 1200 单位移动到 0 单位。但是像这样,我得到了一个结果——它在 -540 个单位上停止了:
这种代码,我为UI写过图片移动动画:
iTween.MoveTo (ballTitleObj, iTween.Hash ("x", 0f, "speed", 100f, "delay", 1f));
我知道 iTween 与 Transform 组件一起工作,UI 元素与 RectTransform 一起工作,但我需要做什么来解决这个问题?
好的,现在花足够的时间来解决这个问题,我至少找到了一个解决方案。
我开始使用 DOTween 而不是 iTween: DOTween - Documentation
它内置包含对 Unity UI 动画的支持,我可以在项目中轻松实现。这是对我有用的代码行:
ballTitle.DOAnchorPosX (0f, 1f, false).SetDelay (0.5f).SetEase(Ease.OutBack);
首先获取标题的RectTransform
:
this.titleRectTransform = ballTitleObj.GetComponent<RectTransform>();
然后,调用iTween.ValueTo
,因为你不想改变变换,你需要改变RectTransform
。
iTween.ValueTo(ballTitleObj, iTween.Hash(
"from", this.titleRectTransform.anchoredPosition,
"to", new Vector2(0, this.titleRectTransform.anchoredPosition.y),
"speed", 100f,
"delay", 1f,
"onupdatetarget", this.gameObject,
"onupdate", "MoveBallTitle"));
}
并且在您调用 iTween.ValueTo
的同一个 class 中,您需要定义一个 MoveBallTitle
方法来更新 anchoredPosition:
public void MoveBallTitle(Vector2 position){
this.titleRectTransform.anchoredPosition = position;
}
此答案基于 this answer Unity 问答网站