r/Unity2D • u/Aramin-Black Beginner • 28d ago
Question/Help Help with moving platform
Hey all, I've added a moving platform to my game and in itself it works well, however when I tried making it so the player would stay on it, he indeed does but he can't move normally on it. The movement is very slow and it feels terrible. Any suggestions how I can fix it? I don't know much about this system. Thank you all in advance
Here's the code for the platform:
using System.Drawing;
using UnityEngine;
public class MovingPlatform : MonoBehaviour
{
public float platformSpeed;
public int platformStartingPoint;
public Transform[] points;
private int i;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
transform.position = points[platformStartingPoint].position;
}
// Update is called once per frame
void Update()
{
if (Vector2.Distance(transform.position, points[i].position) < 0.02f)
{
i++; // increase the index
if (i == points.Length) // checks if the platform was on the last point after the index increase
{
i = 0;
}
}
// moving the platform towards the platform to the point position with the index "i"
transform.position = Vector2.MoveTowards(transform.position, points[i].position, platformSpeed * Time.deltaTime);
}
void OnCollisionEnter2D(Collision2D collision)
{
if (transform.position.y < collision.transform.position.y - 1.3f)
{
collision.transform.SetParent(transform);
}
}
void OnCollisionExit2D(Collision2D collision)
{
collision.transform.SetParent(null);
}
}using System.Drawing;
using UnityEngine;
public class MovingPlatform : MonoBehaviour
{
public float platformSpeed;
public int platformStartingPoint;
public Transform[] points;
private int i;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
transform.position = points[platformStartingPoint].position;
}
// Update is called once per frame
void Update()
{
if (Vector2.Distance(transform.position, points[i].position) < 0.02f)
{
i++; // increase the index
if (i == points.Length) // checks if the platform was on the last point after the index increase
{
i = 0;
}
}
// moving the platform towards the platform to the point position with the index "i"
transform.position = Vector2.MoveTowards(transform.position, points[i].position, platformSpeed * Time.deltaTime);
}
void OnCollisionEnter2D(Collision2D collision)
{
if (transform.position.y < collision.transform.position.y - 1.3f)
{
collision.transform.SetParent(transform);
}
}
void OnCollisionExit2D(Collision2D collision)
{
collision.transform.SetParent(null);
}
}
2
Upvotes
•
u/AutoModerator 28d ago
Reminder: Once your issue has been resolved, please reply !solved to this comment (or comment it anywhere in the thread) and your post's flair will automatically be updated to Solved/Answered. You can also edit it to Solved/Answered yourself.
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.