- Home /
How do i make a gameobject accelerate?
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.
Answer by StianC · Aug 12, 2014 at 04:40 PM
This should have what you're looking for. http://answers.unity3d.com/questions/334574/object-acceleration.html
Answer by LSPressWorks · Aug 12, 2014 at 04:41 PM
gameobject.rigidbody.AddForce(0,0,0); for a specific direction x,y,z
If the object is pointing forward just apply gameobject.rigidbody.AddForce(gameobject.transform.forward * (desired speed * accelerationFactor));
is that what you are asking?
If you need an incremental increase use a ramp system
var ramp : double = 0.05;
when you increase it use
ramp += ramp;
and add it where the acceleration factor would be applied
Answer by Joxno · Aug 12, 2014 at 07:00 PM
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.
Answer by TheGesor · Jun 07, 2017 at 01:41 PM
Try this code:
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);
Your answer
Follow this Question
Related Questions
Making a bubble level (not a game but work tool) 1 Answer
Mouse Swipe and Code Efficiency 0 Answers
Multiple Cars not working 1 Answer
Nav Mesh Agent break between Rotation changes 1 Answer
Distribute terrain in zones 3 Answers