Kojarzę to pytanie (chyba nawet na nie odpowiadałem), w czym dokładnie masz problem?
Kod powinien wyglądać mniej więcej tak (pseudo Unity C#)
using UnityEngine;
using System.Collections;
public class MovingPlatform : MonoBehaviour
{
Rigidbody2D m_rb;
public float speed = 5f; // prędkość poruszania się platformy
public float leftPosition; // lewy strona do której ma dotrzeć platforma
public float rightPosition; // prawa strona, platforma będzie poruszała się pomiędzy leftPosition i rightPosition
int m_direction = -1; // kierunek poruszania platformy, tutaj zawsze zaczyna od poruszania się w prawo
void Start()
{
m_rb = GetComponent<Rigidbody2D>();
if (m_rb == null)
{
Debug.LogError("Rigidbody2D is not attached to object!");
Debug.Break();
}
m_rb.gravityScale = 0f;
}
void Update()
{
if (transform.position.x < leftPosition || transform.position.x > rightPosition)
m_direction *= -1; // jeżeli czas na zmianę kierunku ruchu: odwróć kierunek!
if (Input.isKeyDown("Space"))
{
m_direction = 0;
m_rb.gravityScale = 1f;
}
}
void FixedUpdate()
{
m_rb.velocity = new Vector2(m_direction * speed, m_rb.velocity.y);
}
}
Co należy zauważyć: kod pisałem zupełnie "na sucho" i na czuja więc mogą być jakieś błędy oraz w momencie gdy jakiś inny obiekt będzie wchodził w fizyczną interakcję z tym obiektem to platforma się zapadnie pod ciężarem innego obiektu więc należy na wszelkie kolizje odpowiednio reagować (można np. zwiększyć znacznie masę platformy, albo przy odpowiednich odchyleniach y resetować ją do wartości początkowej)