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!