Can someone help me rewriting my script from transform.position to transform.Translate?
Hi, I'm pretty new to programming and Unity. So i wanted to make a game object get faster over time until a specific time. And that worked with the script, but I found out that there is no friction if you use transform.position, so I want to change it to transform.Translate because it should work then. But since I'm not very experienced and all I'm not able to do it, I already tried it. Can someone help me to rewrite the script to transform.Translate while retaining its functionality?
public class PlayerMovement : MonoBehaviour
{
public Rigidbody rb;
public float sidewaysForce;
public float upwardForce;
public float minSpeed;
public float maxSpeed;
public float accelerationTime;
private float currentSpeed;
private float time;
void Start()
{
currentSpeed = minSpeed;
time = 0;
}
void FixedUpdate()
{
currentSpeed = Mathf.SmoothStep(minSpeed, maxSpeed, time / accelerationTime);
transform.position += Vector3.forward * currentSpeed * Time.deltaTime;
time += Time.deltaTime;
if (Input.GetKey("w"))
{
rb.AddForce(0, upwardForce * Time.deltaTime, 0);
}
if (Input.GetKey("a"))
{
rb.AddForce(-sidewaysForce * Time.deltaTime, 0, 0);
}
if (Input.GetKey("d"))
{
rb.AddForce(sidewaysForce * Time.deltaTime, 0, 0);
}
if (Input.GetKey("s"))
{
rb.AddForce(0, -upwardForce * Time.deltaTime, 0);
}
Debug.Log(transform.position);
}
}
To use transform.Translate, all you need to do is replace
transform.position += Vector3.forward * currentSpeed * Time.deltaTime;
with
transform.Translate(Vector3.forward * currentSpeed * Time.deltaTime);
But with friction, do you mean a physic material, or are you talking about drag in the rigidbody component?
I mean a physic material
Also I tried it with your code but now the rotation of the game object isn't getting ignored, although I use Vector3.forward, do you know how to fix this?
Answer by S-khan · Nov 22, 2020 at 04:46 PM
This Video will give you an idea of how different movement methods work. Then, you can define which way suits your requirement most.
And, if you are intending to user WASD/Arrows or relevant keys to move your character, use Input.GetAxis(), rather than hard-coded inputs.