所以我在Unity游戏中的c#中遇到了这个小问题。
我的屏幕上有2个面板,在屏幕上点击那些面板应该从屏幕上消失动画,但它们只是消失了。
这是我的代码:
public class PanelManager : MonoBehaviour {
public static PanelManager instance;
void Awake(){
if (instance == null) {
instance = this;
}
}
public GameObject PanelUp;
public GameObject PanelDown;
public GameObject TapText;
public GameObject score;
public Text highScore;
// Use this for initialization
void Start () {
highScore.text = "Highscore: " + PlayerPrefs.GetInt ("score");
}
// Update is called once per frame
void Update () {
}
public void GameStart() {
TapText.SetActive (false);
score.SetActive (true);
PanelUp.GetComponent<Animator> ().Play ("MenuUp");
PanelDown.GetComponent<Animator> ().Play ("MenuDown");
}
public void StopAnimations() {
TapText.SetActive (false);
PanelUp.SetActive (false);
PanelDown.SetActive (false);
}
}
我正在调用这样的函数(在其他类中):
private void Update ()
{
if (gameOver)
return;
if (!started) {
if (Input.GetMouseButtonDown (0)) {
started = true;
PanelManager.instance.GameStart ();
if (started = true) {
PanelManager.instance.StopAnimations ();
}
}
} else {
if (Input.GetMouseButtonDown (0)) {
if (PlaceTile ()) {
SpawnTile ();
scoreCount++;
scoreText.text = scoreCount.ToString ();
} else {
EndGame ();
}
}
}
MoveTile ();
// Move the stack
transform.position = Vector3.Lerp(transform.position,desiredPosition,STACK_MOVING_SPEED * Time.deltaTime);
}
答案 0 :(得分:1)
你没有给你的面板动画足够的时间来完成。你打电话PanelManager.instance.GameStart ();
会启动动画,但是在你调用PanelManager.instance.StopAnimations ();
后会立即停用面板,这样你就不会看动画了。
要解决该问题,您可以使用Coroutine,它会等待动画完成所需的时间。
因此,例如,如果您的动画持续1秒,您就可以拥有这样的Coroutine
IEnumerator PlayAnimation()
{
PanelManager.instance.GameStart ();
yield return new WaitForSeconds(1);
PanelManager.instance.StopAnimations ();
}
你可以通过
来调用CoroutineStartCoroutine(PlayAnimation());