Jump to content
GSG3D

[Aporte] PlatformMove

Recommended Posts

Buenas gente, acá les traigo un simple script para controlar el movimiento de traslación de las plataformas.
Lo hice con el objetivo de facilitarme este método y dejárselo a los nuevos usuarios del foro.
Es algo muy básico pero cumple su función.

 

El siguiente script se añade a la plataforma que quieras que tenga esta propiedad.

using UnityEngine;
using System.Collections.Generic;

public class PlatformMove : MonoBehaviour
{
    [Range(0.0f, 15.0f)]
    public float speed;
    public enum Path { loop, reverse }
    public Path path;
    public float minDistance = 0.1f;
    public List<Vector3> positions = new List<Vector3>();
    private int index = 0;

    void Start() { ResetPosition(); } //para situar la plataforma al comienzo
    void Update ()
    {
        //Traslacion
        if (index < positions.Count)
        {
            transform.position = Vector3.MoveTowards(transform.position, positions[index], Time.deltaTime * speed);
            if (Vector3.Distance(transform.position, positions[index]) < minDistance) index++;
        }
        else 
        {
            //Metodos de traslacion
            if (path == Path.loop) index = 0;
            if (path == Path.reverse)
            {
                positions.Reverse();
                index = 0;
            }
        }
    }
    //EDITOR
    public void AddPosition() { positions.Add(transform.position); }
    public void RemoveLastPosition(){ positions.RemoveAt(positions.Count - 1); }
    public void ResetPosition() { transform.position = positions[0]; }
    public void ResetAll() { positions.Clear(); }
    void OnDrawGizmosSelected()
    {
        if (positions != null)
        {
            for (int i = 0; i < positions.Count; i++)
            {
                if(i < positions.Count - 1)
                {
                    Gizmos.color = Color.green;
                    Gizmos.DrawLine(positions[i], positions[i + 1]);
                }
                else
                {
                    Gizmos.color = Color.blue;
                    Gizmos.DrawLine(positions[i], positions[0]);
                } 
            }
        }
    }
}

Y el siguiente dentro de la carpeta "Editor"

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(PlatformMove))]
public class PlatformMoveEditor : Editor
{
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        PlatformMove plataformMove = (PlatformMove)target;
        if (GUILayout.Button("ADD")) plataformMove.AddPosition();
        if (GUILayout.Button("REMOVE LAST POSITION")) { plataformMove.RemoveLastPosition(); }
        if (GUILayout.Button("RESET POSITION (OBJECT)")) plataformMove.ResetPosition();
        if (GUILayout.Button("RESET ALL")) plataformMove.ResetAll();
    }
}

 

Captura de pantalla (31).png

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...