- Home /
Can't change the speed of a character.
Hello, I'm learning C# bit by bit, and I've really just started, so I'm trying to write a simplest character control for 2D game now.
Here's my code:
public Vector2 speed = new Vector2(1,0);
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
float inputX = Input.GetAxis ("Horizontal");
float inputY = Input.GetAxis ("Vertical");
Vector3 movement = new Vector3 (
speed.x = inputX,
speed.y = inputY,
0);
movement *= Time.deltaTime;
transform.Translate (movement);
}
And now I'm trying to multiply the speed by *2 whenever LeftShift is pressed.
I'm adding the following code to the Update() right after the previous code:
if (Input.GetKeyDown(KeyCode.LeftShift))
{
Debug.Log ("Shift is pressed");
movement *= Time.deltaTime;
transform.Translate (movement*2);
}
But it doesn't work. Neither is
movement *= 2;
I really don't undestand why's that, because if I add a multiplier to the original equasion, it works perfectly and the speed is doubled at all times.
Answer by Ericool · Jan 10, 2015 at 02:52 AM
What I see is you want to translate a 2d position with a 3d vector. Maybe correct this first and then we can see if it is something else.
Answer by jeffreyrampineda · Jan 10, 2015 at 01:10 PM
int runningSpeed = 4;
movement = movement.normalized * runningSpeed* Time.deltaTime;
transform.Translate (movement);
Try this. Also, I suggest having only one transform.Translate(movement); on the same method. Try putting the transform.Translate(movement); at the last line and under the part where you click the "LeftShift", you simply edit the runningSpeed to 2 or 4 and edit the movement outside of that "movement = movement.normalized runningSpeed Time.deltaTime;" then finally, your transform.Translate(movement) at the last line.
public Vector2 speed = new Vector2(1,0);
int runningSpeed = 1;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
float inputX = Input.GetAxis ("Horizontal");
float inputY = Input.GetAxis ("Vertical");
Vector3 movement = new Vector3 (
speed.x = inputX,
speed.y = inputY,
0);
if (Input.GetKeyDown(KeyCode.LeftShift))
{
Debug.Log ("Shift is pressed");
runningSpeed = 4;
}
movement = movement.normalized * runningSpeed * Time.deltaTime;
transform.Translate (movement);
}
I wouldn't suggest officially using this code but I think its good for learning.
If I do as you say, it changes speed for all time, even after Shift is unpressed.
Though I managed to make it work:
movement *= Time.deltaTime*2;
transform.Translate (movement);
if (Input.Get$$anonymous$$ey($$anonymous$$eyCode.LeftShift))
{
transform.Translate (movement);
}
I'm sure this is shit from the point of good coding, but it'll do for my first project, I guess.
You can use Input.Get$$anonymous$$eyUp() if you want to change the speed back to original. You can place this below the Get$$anonymous$$eyDown() part.
if (Input.Get$$anonymous$$eyUp($$anonymous$$eyCode.LeftShift))
{
Debug.Log ("Shift is released");
runningSpeed = 1;
}
And I don't think your coding is that bad. I'm sure anyone can become good at it if they practice. Good luck with your project
Your answer
Follow this Question
Related Questions
Making a bubble level (not a game but work tool) 1 Answer
Z axis change 2 Answers
Getting My Character to Move 1 Answer
[C#]CharacterController Turning 2 Answers
Edit this code? 0 Answers