Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Author: CoffeeStraw
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class TrainMovement : MonoBehaviour
- {
- [SerializeField]
- Vector3[] path;
- [SerializeField]
- float percentsPerSecond = 0.2f; // Una sorta di velocità: l'oggetto percorrerà 2% del path ogni secondo
- [SerializeField]
- float currentPathPercent = 0.0f; // Posizione iniziale
- // Costanti calcolate all'avvio del gioco
- float pathVelocity;
- float pathLength = 0;
- // Abilitazione della preview del percorso nell'editor
- private void OnDrawGizmos()
- {
- iTween.DrawPath(path);
- }
- // Calcolo delle costanti
- private void Start()
- {
- pathLength = iTween.PathLength(path);
- pathVelocity = pathLength * percentsPerSecond;
- }
- // Calcolo della posizione ad ogni frame
- private void Update()
- {
- // Calcolo del movimento in maniera che si muova a velocità lineare anche sulle curve
- float deltaPercent = percentsPerSecond * Time.deltaTime;
- Vector3 nextPoint = iTween.PointOnPath(path, currentPathPercent + deltaPercent);
- float calcDist = Vector3.Magnitude(nextPoint - transform.position);
- float calcVelocity = calcDist / Time.deltaTime;
- float velocityScale = pathVelocity / calcVelocity;
- currentPathPercent += (deltaPercent * velocityScale);
- // Appena ha finito il percorso, ricomincia da capo
- if (currentPathPercent > 1.0f)
- currentPathPercent -= 1.0f;
- else if (currentPathPercent < 0)
- currentPathPercent += 1.0f;
- // Posizionamento dell'oggetto nel punto calcolato, lasciando calcolare l'orientamento alla libreria iTween
- Vector3 pos = iTween.PointOnPath(path, currentPathPercent);
- Hashtable hash = iTween.Hash(
- "position", pos,
- "orienttopath", true);
- iTween.MoveUpdate(this.gameObject, hash);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement