- Home /
Shooting 2D - rigidbody2D.velocity not working
Ok, so I'm only using one script to get all of the work done. Its the same script i use for movement, that way i know when my character is facing either right or left. The problem here is that whenever I try to fire a bullet, it doesn't move- Its in C#, I can't use Javascript because if I have to make a separate script for the bullets to get the Component of the Vector2 (for the velocity), I will need it in C#- Also, I don't even know how to get Components properly so.... XD heres my code
using UnityEngine; using System.Collections;
public class MegaMan : MonoBehaviour {
public float maxSpeed = 10f;
public int BullSpeed = 100;
public int spawnDistance = 20;
bool facingRight = true;
Animator anim;
bool grounded = false;
public Transform groundCheck;
float groundRadius = 0.2f;
public LayerMask whatIsGround;
public float jumpForce = 700f;
public GameObject BulletPrefab;
// Use this for initialization
void Start () {
anim = GetComponent<Animator> ();
}
// Update is called once per frame
void FixedUpdate () {
grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);
anim.SetBool ("Ground", grounded);
anim.SetFloat ("vSpeed", rigidbody2D.velocity.y);
float move = Input.GetAxis ("Horizontal");
anim.SetFloat ("Speed", Mathf.Abs (move));
rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
if (move > 0 && !facingRight)
Flip ();
else if (move < 0 && facingRight)
Flip ();
}
void Update () {
if (grounded && Input.GetKeyDown (KeyCode.Z)) {
anim.SetBool ("Ground", false);
rigidbody2D.AddForce(new Vector2(0, jumpForce));
}
if (!grounded && Input.GetKey (KeyCode.X)) {
anim.SetBool ("JumpShoot", true);
} else if (grounded) {
anim.SetBool ("JumpShoot", false);
}
if (Input.GetKeyDown (KeyCode.X)) {
anim.SetBool ("Shooting", true);
} else {
anim.SetBool ("Shooting", false);
}
if (facingRight && Input.GetKeyDown (KeyCode.X)) {
Vector2 v2;
v2.x = BullSpeed;
v2.y = 0;
Rigidbody2D bullit;
bullit = Instantiate(BulletPrefab, transform.position, transform.rotation) as Rigidbody2D;
bullit.rigidbody2D.velocity = v2;
} else if (!facingRight && Input.GetKeyDown (KeyCode.X)) {
Vector2 v2;
v2.x = -BullSpeed;
v2.y = 1;
Rigidbody2D bullit;
bullit = Instantiate(BulletPrefab, transform.position, transform.rotation) as Rigidbody2D;
bullit.rigidbody2D.velocity = v2;
}
}
void Flip ()
{
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
$$anonymous$$ost is copied from the tutorials on this site, fix those errors first.
Answer by spiralfire11 · Dec 30, 2014 at 07:28 PM
Oh wait guys never mind I figured it out myself - It was the getcomponent on my bullet after all XD- now people can use this script if they want to-
On my player :
using UnityEngine; using System.Collections;
public class MegaMan : MonoBehaviour {
public float maxSpeed = 10f;
public int BullSpeed = 100;
public int spawnDistance = 20;
bool facingRight = true;
public Vector2 v2;
Animator anim;
bool grounded = false;
public Transform groundCheck;
float groundRadius = 0.2f;
public LayerMask whatIsGround;
public float jumpForce = 700f;
public GameObject BulletPrefab;
// Use this for initialization
void Start () {
anim = GetComponent<Animator> ();
}
// Update is called once per frame
void FixedUpdate () {
grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);
anim.SetBool ("Ground", grounded);
anim.SetFloat ("vSpeed", rigidbody2D.velocity.y);
float move = Input.GetAxis ("Horizontal");
anim.SetFloat ("Speed", Mathf.Abs (move));
rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
if (move > 0 && !facingRight)
Flip ();
else if (move < 0 && facingRight)
Flip ();
}
void Update () {
if (grounded && Input.GetKeyDown (KeyCode.Z)) {
anim.SetBool ("Ground", false);
rigidbody2D.AddForce(new Vector2(0, jumpForce));
}
if (!grounded && Input.GetKey (KeyCode.X)) {
anim.SetBool ("JumpShoot", true);
} else if (grounded) {
anim.SetBool ("JumpShoot", false);
}
if (Input.GetKeyDown (KeyCode.X)) {
anim.SetBool ("Shooting", true);
} else {
anim.SetBool ("Shooting", false);
}
if (facingRight && Input.GetKeyDown (KeyCode.X)) {
v2.x = BullSpeed;
v2.y = 0;
Rigidbody2D bullit;
bullit = Instantiate(BulletPrefab, transform.position, transform.rotation) as Rigidbody2D;
} else if (!facingRight && Input.GetKeyDown (KeyCode.X)) {
v2.x = -BullSpeed;
v2.y = 1;
Rigidbody2D bullit;
bullit = Instantiate(BulletPrefab, transform.position, transform.rotation) as Rigidbody2D;
}
}
void Flip ()
{
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
And on my BulletPrefab :
using UnityEngine; using System.Collections;
public class BulletScript : MonoBehaviour {
// Use this for initialization
void Start () {
GameObject thePlayer = GameObject.Find ("MegaMan");
MegaMan MyVelocity = thePlayer.GetComponent<MegaMan> ();
rigidbody2D.velocity = MyVelocity.v2;
}
// Update is called once per frame
void Update () {
}
void OnBecameInvisible() {
enabled = false;
}
}
Your answer
Follow this Question
Related Questions
How do I limit rigidbody2d velocity? 2 Answers
How to calculate time it takes for angular velocity to reach 0 w/ angular drag being applied? 2 Answers
How to not get velocity by the other objects?,How to not get force by other gameobjects? 0 Answers
How can I make character arm rotation/mouse aim work correctly? 1 Answer
Shooting animation playing for longer than a second? 1 Answer