• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Chris12345 · Jul 24, 2013 at 02:34 PM · offsetitweenpath

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);
     }
 }
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by robertbu · Jul 24, 2013 at 03:41 PM

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.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

15 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How to apply offset to touch position when dragging object 4 Answers

C# - Offset In-Air Camera from Current Object Position 1 Answer

How can I animate a sprite sheet in Java 1 Answer

Masking a plane object (which has an animated texture offset) 1 Answer

Shader CG not taking tiling into account 2 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges