So im using c# and i have the basic movement script:
using UnityEngine;
using System.Collections;
public class TransformFunctions : MonoBehaviour
{
public float moveSpeed = 10f;
public float turnSpeed = 50f;
void Update ()
{
if(Input.GetKey(KeyCode.UpArrow))
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
if(Input.GetKey(KeyCode.DownArrow))
transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);
if(Input.GetKey(KeyCode.LeftArrow))
transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
if(Input.GetKey(KeyCode.RightArrow))
transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
}
}
I want the gameobject to accelerate from 0 to lets say 10 with maby 2/sec, and not start at 10. My C# skills are VERY restricted, but i do know a little of the basics. I would love to get a ready script if that is possible, thanks for any answers.
I took the liberty of rewriting a bit of your code.
Essentially in order to do what you want it to do you have to add a few variables to account for acceleration, current velocity and some other general maths.
using UnityEngine;
using System.Collections;
public class TransformFunctions : MonoBehaviour
{
public float turnSpeed = 50f;
public float _Velocity = 0.0f; // Current Travelling Velocity
public float _MaxVelocity = 1.0f; // Maxima Velocity
public float _Acc = 0.0f; // Current Acceleration
public float _AccSpeed = 0.1f; // Amount to increase Acceleration with.
public float _MaxAcc = 1.0f; // Max Acceleration
public float _MinAcc = -1.0f; // Min Acceleration
void Update()
{
if (Input.GetKey(KeyCode.UpArrow))
_Acc += _AccSpeed;
if (Input.GetKey(KeyCode.DownArrow))
_Acc -= _AccSpeed;
if (Input.GetKey(KeyCode.LeftArrow))
transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);
if (Input.GetKey(KeyCode.RightArrow))
transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);
if (_Acc > _MaxAcc)
_Acc = _MaxAcc;
else if (_Acc < _MinAcc)
_Acc = _MinAcc;
_Velocity += _Acc;
if (_Velocity > _MaxVelocity)
_Velocity = _MaxVelocity;
else if (_Velocity < -_MaxVelocity)
_Velocity = -_MaxVelocity;
transform.Translate(Vector3.forward * _Velocity * Time.deltaTime);
}
}
So now all the user handles is the acceleration and deceleration of the object and the position is automatically calculated each update frame. This way the object will still keep moving even if the user is not sending the game any input.
public class ScriptNameHere : MonoBehavior
{
void Update
{
var x = Input.GetAxis("Horizontal")* Time.deltaTime * 8.0f;
var y = Input.GetAxis("Vertical")* Time.deltaTime * 8.0f;
transform.translate(x,y,0);
}
Or if you’re doing 3D, do transform.translate(x, 0, y);