I’ve seen people with similar issues but I haven’t quite found a solution yet. my bullet fires fine but only to the right. It’s a 2D metroid type and the bullet is supposed to shoot in the direction the character is facing (the bullet also has to flip because it has a fire tail that can’t face backwards) here are my player, bullet, and bullet forward scripts.
Player code:
using UnityEngine;
using System.Collections;
public class RobotController : MonoBehaviour
{
// how fast the charecter can go at max speed
public float maxSpeed = 10f;
bool facingRight = true;
bool grounded = false;
public Transform groundCheck;
float groundRadious = 0.2f;
public LayerMask whatIsGround;
public float jumpForce = 700f;
// Update is called once per frame
void FixedUpdate ()
{
grounded = Physics2D.OverlapCircle(groundCheck.position, groundRadious, whatIsGround);
// how much charecter is moving
float move = Input.GetAxis ("Horizontal");
//moving charecter ("rigidbody2D.velocity.y" keeps vertical velocity the same)
rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
//links movement to void flip, && = and
if (move > 0 && !facingRight)
Flip ();
else if (move < 0 && facingRight)
Flip ();
}
void Update()
{
// if jump button is pressed
if (grounded && Input.GetButtonDown("Jump"))
{
rigidbody2D.AddForce(new Vector2(0, jumpForce));
}
}
//flipping the world instead of creating left facing animation
void Flip()
{
//!=not
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
}
bullet code:
using UnityEngine;
using System.Collections;
public class bulletScript : MonoBehaviour {
public GameObject bulletPrefab;
public float fireDelay = 0.25f;
float cooldownTimer = 0;
//update is called once per frame
void Update(){
cooldownTimer -= Time.deltaTime;
if( Input.GetButtonDown ("Fire1") && cooldownTimer <= 0 ) {
// Shoot!
Debug.Log ("Pew");
cooldownTimer = fireDelay;
Instantiate(bulletPrefab, transform.position, transform.rotation);
}
}
}
bullet forward code:
using UnityEngine;
using System.Collections;
public class MoveFforward : MonoBehaviour {
float maxSpeed = 20f;
// Update is called once per frame
void Update () {
Vector3 pos = transform.position;
Vector3 velocity = new Vector3 (maxSpeed * Time.deltaTime, 0, 0);
pos += transform.rotation * velocity;
transform.position = pos;
}
}
Any help is GREATLY appreciated.