CodeBugging
CodeBugging

Reputation: 321

How to transform a gameObject to a desired position and return to starting position?

I'm new to UnityScript and I have the following code that does a forward movement of a gameObject on "Z" axis, but needs some refinement. Let me explain.

The script runs when a GUI.Button is clicked. The gameObject starts moving...till infinity. I have tried to make it move till a desired pos, (e.g. an empty gameObject pos) but didn't work at all.

How should I refine this code snippet to move the gameObject to a desired position on a first GUI.Button click and return to starting position on back click?

Furthermore, is it possible to have this movement made step by step on same GUI.Button clicks?

Here is the code snippet:

#pragma strict

// member variables (declared outside any function)
var startPos: Vector3;
var endPos : Vector3;
var cachedTransform : Transform;
private static var isforward = false;

// save pos before moving:
startPos = transform.position;

// make the gameObject transform, then restore the initial position when needed:
transform.position = startPos;

function Awake() {
startPos = transform.localPosition;
}

function Start() {
cachedTransform = transform;
startPos = cachedTransform.position;
}

function FixedUpdate() {

if(isforward){

var translation : float;

if (cachedTransform.position.x == endPos)
 {
  cachedTransform.position = startPos;
 }
 else
 {
    translation = Time.deltaTime * 2;
    cachedTransform.Translate(0, 0, translation);
    cachedTransform.Translate(Vector3.forward * translation);
 }
}
}
 static function doforward ()
{
    isforward = !isforward;
}

Thank you all in advance for your answers.

Upvotes: 0

Views: 2109

Answers (2)

Marconius
Marconius

Reputation: 713

You might want to look into the Vector3.Lerp method. This takes two vectors (points) and a float as parameters, then gives you back a point that's a fraction of the way between them. So for example, Lerp(from, to, 0.3f) will give you a point 30% of the way between the two points. Then once you have this, all you need to do is set your object's transform.

Upvotes: 1

user3183542
user3183542

Reputation: 196

You can easily move a game object if you attach a script to it, then (in JavaScript)

#pragma strict    

var startPosition;

// Record the starting position when the scene loads
function Start () {
startPosition = gameObject.transform.position;

}

// Call this to move you object to wherever
function moveObject () {

var newPos = new Vector3 (10,20,0); //(where ever you need it to go) 

gameObject.transform.position = newPos;   

}

// Call this to move the object to starting position, using variable we made at start
function moveToStart () {
gameObject.transform.position = startPosition;
}

Then you just call those functions when you need to move the object around.

Upvotes: 1

Related Questions