2.5D Phase 1 Framework: Elevator

No sweat, I did this before!

2.5D Phase 1 Framework Challenge

For today's challenge, I created a functional lift system with a 5-second delay before moving from point A to B. I went through an elevator system before as well as a moving platform system and they are mostly all the same under the hood.

What do I need?

I need the elevator to go from A to B. So two transforms with their unique position in world space. A float variable for the speed of the elevator. A float variable for the wait time before switching towards the other point. And lastly, a bool for switching.

Getting Started

In the Elevator script attached to the lift game object, I have:

[SerializeField] private Transform _pointA, _pointB;
[SerializeField] private float _speed = 3f;
[SerializeField] private float _waitTime = 5f;
private bool _switch = false;

I want the bool to control when I can switch from one point to the other. So before switching, I want there to be a 5-second delay. Using a coroutine will help me with the delay.

IEnumerator WaitBeforeSwitchingRoutine(bool _canSwitch)
{
yield return new WaitForSeconds(_waitTime);
_switch = _canSwitch;
}

After 5-seconds, switch!

In FixedUpdate, if the current position equals point A, then switch is true. Else if the current position equals point B, switch is false.

if (transform.position == _pointA.position)
StartCoroutine(WaitBeforeSwitchingRoutine(true));
else if (transform.position == _pointB.position)
StartCoroutine(WaitBeforeSwitchingRoutine(false));

If switch is false, then I want the current position to move to point A. If switch is true, then I want the current position to move to point B.

if (!_switch)
transform.position = Vector3.MoveTowards(transform.position, _pointA.position, _speed * Time.fixedDeltaTime);
else
transform.position = Vector3.MoveTowards(transform.position, _pointB.position, _speed * Time.fixedDeltaTime);

I now have a working elevator system that loops back and forth with a wait time delay!

When the player goes on it, the player jitters. The reason being is that the player is not parented to the elevator. To fix it, I attached a box collider set as a trigger and adjusted the y-positon of the collider so it can detect the player.

In the Elevator script, when the player collides with this trigger, I want to parent the player to the elevator transform.

private void OnTriggerEnter(Collider other)
{
if (other.CompareTag(“Player”))
{
other.transform.parent = transform;
}
}

And if the player exits the trigger, I want the parent of the player not to be in the elevator game object’s transform anymore.

private void OnTriggerExit(Collider other)
{
if (other.CompareTag(“Player”))
{
other.transform.parent = null;
}
}

Now it’s working like a charm!

Gabriel

--

--

--

Hello everyone, My name is Gabriel Perez, I am a Unity Developer and a creator who is always learning and experimenting.

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Azure Event Hubs — Azure Databricks

How We Write Interview Questions [Detailed Guide]

Building up on Lambda Layers

HanekeSwift iOS

Critical Thinking Exercise, Find The Root Cause For Balcony Blinds Issue — Tentamen Software…

Using Emissions in Unity

Reward new and old CITEX users,“multiple bonuses will not stop”

Fine-Grained Access Control in Databricks with Privacera

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Gabriel Perez

Gabriel Perez

Hello everyone, My name is Gabriel Perez, I am a Unity Developer and a creator who is always learning and experimenting.

More from Medium

My journey becoming a Unity game developer: Make a game look beautiful-Scifi Control Room Walls

Simple Player Movement in Unity

GetComponent in Unity

Tessellation in HDRP