C# 统一-使文本展开然后收缩,就像向用户弹出一样。我想提请观众注意他们的得分
我正在寻找一种方法,使用户得分,这是一个UI文本组件弹出。我的意思是先扩大然后收缩,也许每次得分增加都会动摇 我真的不知道如何开始。我的分数在增加,我猜我可以改变文本对象的大小,然后使其恢复到原始大小,但这样做看起来不太好。C# 统一-使文本展开然后收缩,就像向用户弹出一样。我想提请观众注意他们的得分,c#,unity3d,C#,Unity3d,我正在寻找一种方法,使用户得分,这是一个UI文本组件弹出。我的意思是先扩大然后收缩,也许每次得分增加都会动摇 我真的不知道如何开始。我的分数在增加,我猜我可以改变文本对象的大小,然后使其恢复到原始大小,但这样做看起来不太好。 欢迎任何建议 我会使用一个协同程序,使用Mathf.PingPong更改文本的rectTransform的localScale: // Recommendation: assign Text here in the inspector public Text textToS
欢迎任何建议 我会使用一个协同程序,使用
Mathf.PingPong
更改文本的rectTransform
的localScale
:
// Recommendation: assign Text here in the inspector
public Text textToScale;
public float halfDuration = 0.5f;
public float bigScaleMultiplier = 1.5f;
private Coroutine effectCoroutine = null;
private Vector3 scaleStart;
// call this to begin the effect
public void StartEffect()
{
// ensure duplicates don't run
if (effectCoroutine == null)
{
effectCoroutine = StartCoroutine(DoEffect());
}
}
private IEnumerator DoEffect()
{
float elapsedPortion = 0f;
scaleStart = textToScale.rectTransform.localScale;
float scaleMultiplierIncrease = bigScaleMultiplier - 1f;
while (elapsedPortion < 2f)
{
// t = What fraction of "big" we are currently at
float t = Mathf.PingPong(elapsedPortion, 1f);
float curScaleMultiplier = 1f + scaleMultiplierIncrease * t;
textToScale.rectTransform.localScale = curScaleMultiplier * scaleStart;
yield return null;
elapsedPortion += Time.deltaTime / halfDuration;
}
textToScale.rectTransform.localScale = scaleStart;
effectCoroutine = null;
}
//建议:在inspector中指定此处的文本
公共文本文本缩放;
公共浮动半持续时间=0.5f;
公共浮点bigScaleMultiplier=1.5f;
私有协同路由effectCoroutine=null;
私有向量3 scaleStart;
//调用此函数以开始效果
公共无效开始生效()
{
//确保不运行重复项
if(effectCoroutine==null)
{
effectCoroutine=start例程(DoEffect());
}
}
私有IEnumerator DoEffect()
{
浮动ElapsedParty=0f;
scaleStart=textToScale.rectTransform.localScale;
float-scaleMultiplierIncrease=bigScaleMultiplier-1f;
而(ElapsedPart<2f)
{
//t=我们目前处于“大”的哪一部分
浮球t=数学乒乓球(elapsedpoint,1f);
float curScaleMultiplier=1f+scaleMultiplierIncrease*t;
textToScale.rectcransform.localScale=curScaleMultiplier*scaleStart;
收益返回空;
elapsedpoint+=Time.deltaTime/halfDuration;
}
textToScale.rectTransform.localScale=scaleStart;
effectCoroutine=null;
}
这正是我想要的。非常感谢。