【发布时间】:2020-01-24 20:18:05
【问题描述】:
基本上是标题所要求的。我想播放我的动画,然后在动画播放完毕后,我希望它在大约 2 秒内淡出场景之前有一个小的延迟。淡出后,应将其禁用并重置。
到目前为止,这是我的代码,但是当我将解锁设置为 true 时,它什么也不做。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AnimationController : MonoBehaviour
{
public Animator anim;
public SpriteRenderer sr;
public bool unlocking;
Sprite unlockSprite;
Sprite lockSprite;
Color temp;
// Start is called before the first frame update
void Start()
{
unlocking = false;
unlockSprite = Resources.Load<Sprite>("unlock");
lockSprite = Resources.Load<Sprite>("lock");
}
// Update is called once per frame
void Update()
{
if (unlocking) {
anim.Play("unlock");
unlocking = false;
sr.sprite = unlockSprite;
System.Threading.Thread.Sleep(1000);
StartCoroutine(FadeTo(0.0f, 2.0f));
temp = new Color(sr.color.r, sr.color.g, sr.color.b, 0f);
sr.color = temp;
gameObject.SetActive(false);
sr.sprite = lockSprite;
temp = new Color(sr.color.r, sr.color.g, sr.color.b, 1f);
sr.color = temp;
}
}
IEnumerator FadeTo(float aValue, float aTime)
{
float alpha = sr.color.a;
for (float t = 0.0f; t < 1.0f; t += Time.deltaTime / aTime)
{
Color newColor = new Color(sr.color.r, sr.color.g, sr.color.b, Mathf.Lerp(alpha, aValue, t));
sr.color = newColor;
yield return null;
}
}
}
更新代码:
anim.Play("unlock");
unlocking = false;
if (animInfo.normalizedTime >= 1)
{
anim.enabled = false;
sr.sprite = unlockSprite;
StartCoroutine(FadeTo(0.0f, 2.0f));
temp = new Color(sr.color.r, sr.color.g, sr.color.b, 0f);
sr.color = temp;
gameObject.SetActive(false);
sr.sprite = lockSprite;
temp = new Color(sr.color.r, sr.color.g, sr.color.b, 1f);
sr.color = temp;
}
【问题讨论】:
-
好的,因此您可以通过检查animationstateinfo 来判断动画是否已播放完毕,并检查它正在播放您的想法以及该动画的播放距离。我不确定你在哪里将解锁设置为真......但是,我建议你的解锁代码都不想在你的更新中像这样,因为它可能只会给你 0 fps 一段时间然后睡觉?哎哟..无论如何,否则你所拥有的似乎是合理的
-
请不要在主线程上调用
Thread.Sleep。 -
@BugFinder 首先我想说我对统一很陌生。我不知道animationstateinfo是什么,只是AnimatorStateInfo,我也不知道如何访问它。我尝试使用带有animation.isPlaying的while语句,但是当我尝试在检查器中设置动画时,它不会添加它(点在一边并通过拖动)。另外,我应该把我的解锁码放在哪里?我在玩游戏时(在检查器中)将解锁设置为 true,稍后我将添加触发器。
-
对于animationstateinfo,请查看unity docs,它们提供了很多有用的信息。
-
@BugFinder 我找不到它,你能给我一个链接吗?