How can I move a Kinematic Rigidbody2d along the x-axis?
Hey guys I've been searching for a while and couldn't find a solution specifically for my needs. I'm working on a school project where my only current need is to make an object move horizontally through the x-axis, which is easy enough, but I cannot figure out how to make it work through the default values set in Unity, such as using the arrow keys and then setting A and D for the alternate negative-X and positive-X movements.
Here is my current code:
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
public float speed = 5f;
private Rigidbody2D rb2d;
void Start()
{
rb2d = GetComponent<Rigidbody2D>();
}
void Update()
{
if (Input.GetKey(KeyCode.A))
{
transform.position += Vector3.left * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode. D))
{
transform.position += Vector3.right * speed * Time.deltaTime;
}
}
}
I tried using a code snippet I found from a tutorial on the Unity website but it was for using force and I couldn't modify it for my needs. Unfortunately, I cannot use physics on my player object because it's a kinematic rigidbody2d.
Could anyone provide insight on this?
I realize the solution to my problem would be:
using UnityEngine;
using System.Collections;
public class SimplePlatformController : $$anonymous$$onoBehaviour
{
public float speed = 5f;
private Rigidbody2D rb2d;
void Start()
{
rb2d = GetComponent<Rigidbody2D>();
}
void Update()
{
if (Input.Get$$anonymous$$ey($$anonymous$$eyCode.A) || Input.Get$$anonymous$$ey($$anonymous$$eyCode.LeftArrow))
{
transform.position += Vector3.left * speed * Time.deltaTime;
}
if (Input.Get$$anonymous$$ey($$anonymous$$eyCode.D) || Input.Get$$anonymous$$ey($$anonymous$$eyCode.RightArrow))
{
transform.position += Vector3.right * speed * Time.deltaTime;
}
}
}
Simply using || for OR but how would I pull from Unity's default just like the 2D UFO Tutorial does with the following:
using UnityEngine;
using System.Collections;
public class CompletePlayerController : $$anonymous$$onoBehaviour {
public float speed; //Floating point variable to store the player's movement speed.
private Rigidbody2D rb2d; //Store a reference to the Rigidbody2D component required to use 2D Physics.
// Use this for initialization
void Start()
{
//Get and store a reference to the Rigidbody2D component so that we can access it.
rb2d = GetComponent<Rigidbody2D> ();
}
//FixedUpdate is called at a fixed interval and is independent of frame rate. Put physics code here.
void FixedUpdate()
{
//Store the current horizontal input in the float moveHorizontal.
float moveHorizontal = Input.GetAxis ("Horizontal");
//Store the current vertical input in the float moveVertical.
float moveVertical = Input.GetAxis ("Vertical");
//Use the two store floats to create a new Vector2 variable movement.
Vector2 movement = new Vector2 (moveHorizontal, moveVertical);
//Call the AddForce function of our Rigidbody2D rb2d supplying movement multiplied by speed to move our player.
rb2d.AddForce (movement * speed);
}
}
I know it's using input.GetAxis("Horizontal") but I'm unsure of how to use that for non-physic based movement.
Answer by vaibhavmulti · Oct 03, 2017 at 10:32 AM
You can use velocity to move horizontally or vertically. rb2d.velocity = new Vector2(x,y); // where x is the velocity in the x direction and y is the velocity in the y direction
Your answer
Follow this Question
Related Questions
Kinematic 2D Rigidbody movement: Rigidbody2D.MovePosition vs Rigidbody2D.position problem 1 Answer
How to add speed to a child kinematic rigid body? 0 Answers
Move GameObject with transform.position 1 Answer
(2D) Rigidbody slides a bit through Box Collider 1 Answer
Stop rigid bodies from sinking when standing on it. 1 Answer