Itween offset from path?

hello, how can i offset the game object from the path defined? here is my code!

using UnityEngine;
using System.Collections;

public class follow : MonoBehaviour {
    public bool IsleftOn = false;
	public bool IsRightOn = false;
    private Vector3 targetPosition;

    public float runSpeed = 0;

    public Transform[] path0;
    public Transform[] path1;
    public Transform[] path2;

    private Transform[][] paths = new Transform[3][];
    private int iPath = 1;


    float percentsPerSecond = 0.02f; // %2 of the path moved per second
    float currentPathPercent = 0.0f; //min 0, max 1

    void Start () {	
    paths[0] = path0;
    paths[1] = path1;
    paths[2] = path2;
    }

    void Update () {  
		  IsleftOn = PlayMakerGlobals.Instance.Variables.GetFsmBool("leftcontrol").Value;
		  IsRightOn = PlayMakerGlobals.Instance.Variables.GetFsmBool("rightcontrol").Value;
		  runSpeed = PlayMakerGlobals.Instance.Variables.GetFsmFloat("playerspeed").Value;
		   if  (IsleftOn == true) {
                if (iPath == 2) iPath = 1; else iPath = 0;
			    PlayMakerGlobals.Instance.Variables.GetFsmBool("leftcontrol").Value = false;

           }

           else if (IsRightOn == true) {
                if (iPath == 0) iPath = 1; else iPath = 2;
			    PlayMakerGlobals.Instance.Variables.GetFsmBool("rightcontrol").Value = false;
           }
       currentPathPercent += percentsPerSecond * runSpeed;
       iTween.PutOnPath(gameObject, paths[iPath], currentPathPercent);
       transform.LookAt(iTween.PointOnPath(paths[iPath],currentPathPercent+.01f));
    }

    void OnDrawGizmos(){
       iTween.DrawPath(path0);
       iTween.DrawPath(path1);
       iTween.DrawPath(path2);
    }
}

I assume this is a followup to your last question:

http://answers.unity3d.com/questions/498903/itween-change-paths-smoothly.html

And I assume you are asking about continuing to use three paths and using my offset suggestion in order to smoothly change between lanes. This question should have been “asked” as a comment to my original answer, and only posted a new question if you did not get a satisfactory response.

As outlined in the previous answer, you will send an empty game object down the path with the physical game object as a child. The script above goes on the empty game object, but you will need to add a reference to the physical game object.

The script that goes on the physical game object will be something like this:

using UnityEngine;
using System.Collections;
 
public class Car : MonoBehaviour {
    public float speed = 1.0f;
	
	void Update() {
		transform.localPosition = Vector3.MoveTowards(transform.localPosition, Vector3.zero, speed * Time.deltaTime);	
	}
}

Anytime the physical game object is not at the same place at the parent, this code gradually moves them back together.

Now back to the script above. You will need to introduce a variable to reference the physical game object. Let’s assume it is a car.

public Transform car;

You’ll initialize it in the inspector by dragging and dropping the physical game object on the variable. You could instead make it private and use something like GameObject.Find() to initialize it.

You need to keep track of the previous track and change the localOffset when you change tracks. Replace line 32 - 44 with the following:

int iPrevPath = iPath;
if  (IsleftOn == true) {
    if (iPath == 2) iPath = 1; else iPath = 0;
    PlayMakerGlobals.Instance.Variables.GetFsmBool("leftcontrol").Value = false;
}
else if (IsRightOn == true) {
    if (iPath == 0) iPath = 1; else iPath = 2;
        PlayMakerGlobals.Instance.Variables.GetFsmBool("rightcontrol").Value = false;
}

Vector3 v3PrevPos = transform.position;

currentPathPercent += percentsPerSecond * runSpeed;
iTween.PutOnPath(gameObject, paths[iPath], currentPathPercent);
transform.LookAt(iTween.PointOnPath(paths[iPath],currentPathPercent+.01f));

if (iPath != iPrevPath) {
    car.localPosition = v3PrevPos - transform.position
}

This is all untested, so you may have some fiddling to do to get it to work. But conceptually this is what I was writing about in the original answer.