How do I Trigger my elevator to go up and then return back down?
I'm making a 2D game and I have a platform I want to use as an elevator. basically I want the platform to be static until the player walks/jumps on it and then stay at the finish point until the player leaves the platform then returns back to the starting point.
Currently the platform keeps repeating the "PLAYER_ON_ELEVATOR" animation and I'm not even on it to trigger the animation.
I have also tried this with the OnCollisionEnter/Exit2D method, but I get the same result.
Really appreciate any help.
public class TriggerLift : MonoBehaviour
{
[SerializeField] float pause = 2f;
//Tag string ref
const string PLAYER_TAG = "Player";
const string PLAYER_ON_PLATFORM_ANIM = "PlayerOnPlatform";
const string PLAYER_OFF_PLATFORM_ANIM = "PlayerOffPlatform";
Animator myAnimator;
private void Awake()
{
myAnimator = GetComponent<Animator>();
}
private void OnTriggerEnter2D(UnityEngine.Collider2D col)
{
if (col.gameObject.CompareTag(PLAYER_TAG))
{
col.transform.SetParent(this.transform);
myAnimator.SetTrigger(PLAYER_ON_PLATFORM_ANIM);
}
}
private void OnTriggerExit2D(UnityEngine.Collider2D col)
{
if (col.gameObject.CompareTag(PLAYER_TAG))
{
col.transform.parent = null;
StartCoroutine(PauseElevator());
myAnimator.SetTrigger(PLAYER_OFF_PLATFORM_ANIM);
}
}
IEnumerator PauseElevator()
{
yield return new WaitForSeconds(pause);
}
}
Answer by lgarczyn · Jan 20, 2020 at 06:55 PM
Is your coroutine meant to wait for pause seconds? Because that's now how things work.
private void OnTriggerExit2D(UnityEngine.Collider2D col)
{
if (col.gameObject.CompareTag(PLAYER_TAG))
{
col.transform.parent = null;
StartCoroutine(PauseElevator());
}
}
IEnumerator PauseElevator()
{
yield return new WaitForSeconds(pause);
myAnimator.SetTrigger(PLAYER_OFF_PLATFORM_ANIM);
}
That's how a coroutine works. StartCoroutine returns instantly, but the rest of the coroutine (after the yield return) is called later.
Your answer
Follow this Question
Related Questions
ANIMATION TRIGGER DOESN'T PLAY 1 Answer
Stop animation when bullet collides with target 0 Answers
How to have a game object register its OnTriggerEnter function? 1 Answer
Making a hit meter 1 Answer