Rigidbody2D moving WAY to fast
Hello,
I am at the very beginning of developing my top-down 2D game in Unity. Attached to my simple sprite is a 2D box collider and a 2D rigidbody. The rigidbody has a gravity scale of 0 and rotation disable - admittedly, the only reason I am using the rigidbody is for collision detection. I am using the below code which is allowing me to move in somewhat of a grid pattern only - no diaganol movement:
using UnityEngine;
using System.Collections;
public class CharacterController2D : MonoBehaviour {
public float speed = 1.0f;
private Rigidbody2D rb2D;
void Start () {
rb2D = GetComponent<Rigidbody2D> ();
}
void FixedUpdate(){
if (Input.GetKey(KeyCode.D) && rb2D.transform.position == rb2D.transform.position)
{
rb2D.transform.position += Vector3.right;
}
else if (Input.GetKey(KeyCode.A) && rb2D.transform.position == rb2D.transform.position)
{
rb2D.transform.position += Vector3.left;
}
else if (Input.GetKey(KeyCode.W) && rb2D.transform.position == rb2D.transform.position)
{
rb2D.transform.position += Vector3.up;
}
else if (Input.GetKey(KeyCode.S) && rb2D.transform.position == rb2D.transform.position)
{
rb2D.transform.position += Vector3.down;
}
rb2D.transform.position = Vector3.MoveTowards(rb2D.transform.position, rb2D.transform.position, speed * Time.deltaTime);
}
}
The immediate issue is that my sprite is just cruising! I have the speed at .025 in the inspector and he is still moving way to fast. I have tried adjusting the velocity of the rigidbody. I have googled the issue. I cannot find anything helpful.
I just want the sprite moving at a reasonable speed.
Answer by TeozTroy · Sep 20, 2015 at 11:11 PM
Hi, do you only want Up, down, left & right movement? or do you want the ability to move in any direction with a combination of input?
If you are okay with the latter, you could use something like this:
public float moveSpeed;
private Vector3 movement;
public Rigidbody2D rigidBody;
public bool playerIsMoving = false;
// Use this for initialization
void Start()
{
rigidBody = GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
float h = Input.GetAxisRaw("Horizontal") * Time.deltaTime * moveSpeed;
float v = Input.GetAxisRaw("Vertical") * Time.deltaTime * moveSpeed;
Move(h, v);
}
public void Move(float h, float v)
{
movement.Set(h, v, 0f);
rigidBody.MovePosition(transform.position + movement);
movement = movement.normalized * moveSpeed * Time.deltaTime;
Your answer
Follow this Question
Related Questions
Making Hanzo’s Scatter Arrow in 2D 0 Answers
Climbing code problem (2d physic). 0 Answers
Player randomly stops moving 1 Answer
Adding velocity to an object in a brick breaker game 0 Answers
Trying to add force to an object... is this done correctly? 0 Answers