- Home /
Need a little help converting some line of JS to C#
I know there's a converter out there but I'm more curious as to how to change the lines of code that the converter won't change. I try to work around it, fixing all the errors VB finds, but the result is that my character stops moving and the camera starts to act weird.
A sample of the player movement code in question...
if(Input.GetKey(moveLeft) == true)
{
GetComponent.<Rigidbody2D>().velocity.x -= speed;
}
More...
GetComponent.<Rigidbody2D>().velocity.x *= friction;
How it currently looks like in C#...
void Start()
{
rigi = GetComponent<Rigidbody2D>();
rigiVel = rigi.velocity;
}
void Update()
{
if(Input.GetKey(moveLeft))
{
rigiVel.x -= speed;
}
}
Is your camera set up to follow the object being moved here?
Now it is; had the camera follow the player only if the player moved to a certain part of the screen but ultimately decided against it. Thank you for your help anyways.
Answer by Bunny83 · Feb 05, 2018 at 05:52 PM
As you already did it's recommended to store the Rigidbody2D component reference in a variable. However the velocity is a vector which is a value type. So it's not a reference. Changing the vector does not affect the actual velocity of the rigidbody. You have to re-assign the modified velocity
Rigidbody2D rb;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
Vector3 velocity = rb.velocity; // copy current velocity;
if(Input.GetKey(moveLeft))
{
velocity.x -= speed;
}
velocity.x *= friction;
rb.velocity = velocity; // assign it back
}
This is basically what did happen in the UnityScript code. The UnityScript compiler has some syntactic sugar. When you did:
rb.velocity.x -= speed;
It actually created this code behind the scenes for you:
var tmp = rb.velocity;
tmp.x -= speed;
rb.velocity = tmp;
Thank you, it's working as intended. Decided to just "glue" the camera into the player ins$$anonymous$$d of it acting like it follows the player after the player goes so far. I also appreciate the elaboration at the end; everything makes sense now.
Your answer
![](https://koobas.hobune.stream/wayback/20220612152004im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Player Movement Question in 2D 1 Answer
Ragdoll toggle unity 2d 1 Answer
camera script not working 1 Answer
Local player always at same position 2 Answers