- Home /
lerp in coroutine doesn't work correctly
hi! can anyone say what is wrong in my code?? i call just the "showpanel" function out of this class. code work correctly in coming the panels into the screen but in hiding doesn't.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class UIPanel : MonoBehaviour {
public GameObject Content;
public PanelType typeofPanel;
public static UIPanel activePanel;
public static UIPanel hidingPanel;
public static Dictionary<PanelType, UIPanel> panels;
public static Vector3 hideLocation = new Vector3(0, -10, 0);
public static Vector3 showLocation = new Vector3(0, 0, 0);
public static float movingTime = 3;
void Awake()
{
if (panels == null) panels = new Dictionary<PanelType, UIPanel>();
if (panels.ContainsKey(typeofPanel) == false)
{
panels.Add(typeofPanel, this);
}
this.transform.position = hideLocation;
}
public static void showPanel(PanelType typeofPanel)
{
if(activePanel != null)
{
hidingPanel = activePanel;
hidingPanel.hide();
}
activePanel = panels[typeofPanel];
activePanel.Content.SetActive(true);
activePanel.show();
}
public void show()
{
StartCoroutine(DoShow());
}
public IEnumerator DoShow()
{
while (getDistance(activePanel.Content.transform.position, showLocation) > 1)
{
activePanel.Content.transform.position = Vector3.Lerp(activePanel.Content.transform.position,
showLocation, 5f*Time.deltaTime);
yield return null;
}
yield return new WaitForSeconds(movingTime);
}
public void hide()
{
StartCoroutine(DoHide());
}
public IEnumerator DoHide()
{
while(getDistance(hidingPanel.Content.transform.position, hideLocation) > 1)
{
hidingPanel.Content.transform.position = Vector3.Lerp(hidingPanel.Content.transform.position,
hideLocation, 5f*Time.deltaTime);
yield return null;
}
yield return new WaitForSeconds(movingTime + 1.0f);
hidingPanel.Content.SetActive(false);
}
public static float getDistance(Vector3 start, Vector3 end)
{
return Mathf.Sqrt(Mathf.Pow(start.x - end.x, 2) + Mathf.Pow(start.y - end.y, 2));
}
}
public enum PanelType{
BUY_BUILDING,
BUY_FARM,
}
Comment
Your answer
Follow this Question
Related Questions
object's children not moving with it when using a Lerp-ing coroutine 0 Answers
Lerping alpha with coroutine only lerping first time it is triggered by event 1 Answer
[HELP] How to make camera smooth change position while follow object? 1 Answer
If statement not being fullfilled until GameObject inspected in inspector. 0 Answers