translate

stupid question. How can I say that an object must move with translated for only 2 seconds and then stop?

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {

float F_time;

void Update () 
{
	F_time += Time.deltaTime;

	if(F_time < 2.0f)
	{
		transform.Translate(Vector3.left * Time.deltaTime);
	}
}

}

Not a stupid question!

Let’s break down your problem a bit, first.

A) I want my object to be translated

B) I want this translation to only last for two seconds.

First, translation is simple:

transform.Translate(xAmount, yAmount, zAmount);

…Or…

transform.Translate(vector3Amount);

I prefer the Vector3 version because you can achieve Framerate Independence really easily, as such:

// Move up 2 units per second, and forward 1 unit per second.
Vector3 movement = new Vector3(0.0f, 2.0f, 1.0f) * Time.deltaTime;
transform.Translate(movement);

…Now, let’s combine it with that other requirement, that the translation last two seconds:

public class FooBehavior : MonoBehaviour
{
    #region Fields/Properties

    public float Duration = 2.0f;
    private float _moveEndsAt = 0.0f;

    public Vector3 Movement = new Vector3(0.0f, 2.0f, 1.0f);

    #endregion Fields/Properties

    #region Engine Hooks

    public void Start()
    {
        _moveEndsAt = Time.time + Duration;
    }

    public void FixedUpdate()
    {
        if(Time.time > _moveEndsAt)
            return;

        Vector3 movement = Movement * Time.deltaTime;
        transform.Translate(movement);
    }

    #endregion Engine Hooks
}

Pretty much, we just figure out when we want the move to stop (now + duration), and as long as the current time is prior to that ending time, we perform the translation every frame.

Good question, and hope that helps!