- Home /
How to make the bullet shoot in the sprite direction
Hello. I am very new to unity and I am trying to shoot the bullet in the direction my sprite is facing. Any help is greatly appreciated.
public var bullet : GameObject;
public var speed = 20;
public var up :Sprite;
public var right :Sprite;
public var left :Sprite;
public var down :Sprite;
public var UpRight :Sprite;
public var Upleft :Sprite;
public var downleft :Sprite;
public var downRight :Sprite;
private var currentDirection = Vector3.zero;
var health = 3;
var lastShot = 0;
function Start () {
}
if (Input.GetKeyUp("right") && pos.x < .91)
{
if(r2d.velocity.y > 0)
{
GetComponent(SpriteRenderer).sprite = UpRight;
}
else if(r2d.velocity.y < 0 )
{
GetComponent(SpriteRenderer).sprite = downRight;
}
else
{
GetComponent(SpriteRenderer).sprite = right;
}
r2d.velocity = new Vector3(0f, r2d.velocity.y);
}
function Update () {
lastShot++;
var r2d : Rigidbody2D = GetComponent("Rigidbody2D");
var pos = Camera.main.WorldToViewportPoint(transform.position);
var horizontal =Input.GetAxis("P2Horizontal");
var vertical = Input.GetAxis("P2Vertical");
var movement = new Vector2(horizontal, vertical);
r2d.AddForce(movement * speed);
if (Input.GetKeyDown("return")) {
if(lastShot > 70)
{
var bullet = Instantiate(bullet,transform.position, Quaternion.identity);
var velocity = bullet.GetComponent(Rigidbody2D);
velocity.AddForce(r2d.transform.right * -3);
lastShot = 0;
}
}
Answer by Yuvii · Oct 11, 2017 at 09:09 AM
Hey,
In your configuration, you should declare a vector2 dirBullet and change it when you change the sprite and multiply this direction to the bullet's speed.
You got some weird stuff in your code (like the -3 in your bullet speed), but anyway i'll only help you on the bullet direction. (And on the fact that you are checking your inputs outside of the Update, which may not works very well)
public var bullet : GameObject;
public var speed = 20;
public var up :Sprite;
public var right :Sprite;
public var left :Sprite;
public var down :Sprite;
public var UpRight :Sprite;
public var Upleft :Sprite;
public var downleft :Sprite;
public var downRight :Sprite;
private var currentDirection = Vector3.zero;
var health = 3;
var lastShot = 0;
Vector2 dirBullet;
function Start () {
dirBullet = new Vector2(1,0);
var r2d : Rigidbody2D = GetComponent("Rigidbody2D");
}
function Update () {
var pos = Camera.main.WorldToViewportPoint(transform.position);
var horizontal = Input.GetAxis("P2Horizontal");
var vertical = Input.GetAxis("P2Vertical");
var movement = new Vector2(horizontal, vertical);
if (Input.GetKeyUp("right") && pos.x < .91)
{
if(r2d.velocity.y > 0)
{
GetComponent(SpriteRenderer).sprite = UpRight;
dirBullet = New Vector2(1,1);
}
else if(r2d.velocity.y < 0 )
{
GetComponent(SpriteRenderer).sprite = downRight;
dirBullet = New Vector2(1,-1);
}
else
{
GetComponent(SpriteRenderer).sprite = right;
dirBullet = New Vector2(1,0);
}
r2d.velocity = new Vector3(0f, r2d.velocity.y);
}
lastShot++;
r2d.AddForce(movement * speed);
if (Input.GetKeyDown("return")) {
if(lastShot > 70)
{
var bullet = Instantiate(bullet,transform.position, Quaternion.identity);
var velocity = bullet.GetComponent(Rigidbody2D);
velocity.AddForce(dirBullet * r2d.transform.right * -3);
lastShot = 0;
}
}
Try something like that, and tell me if it works :)
edit: actually, i changed some more things. Like where you declare your variables to be more optimized and readable. But again, there's some things i don't get in your code.
Your answer