- Home /
need help with 2d shooting
so i got the movement down but i need some help with the shooting. ive been messing around with this but i cant seem to figure it out. im trying to have it so it shoots with the w,a,s,d keys.im using C# here is my code:
using UnityEngine;
using System.Collections;
public class Creator : MonoBehaviour {
public Rigidbody ThePrefab;
private float fireRate = .15f;
private float nextFire = 0;
private float bulletSpeed = 500f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
//shoot up
if (Input.GetKeyDown(KeyCode.W) && Time.time > nextFire){
nextFire = Time.time + fireRate;
Debug.Log ("nf" + nextFire);
Rigidbody instance;
instance = Instantiate(projectile, transform.position, transform.rotation) as Rigidbody;
instance.AddForce(transform.up * bulletSpeed);
}
//shoot left
if (Input.GetKeyDown(KeyCode.A) && Time.time > nextFire){
nextFire = Time.time + fireRate;
Rigidbody instance;
instance = Instantiate(projectile, transform.position, transform.rotation) as Rigidbody;
instance.transform.rotation = Quaternion.AngleAxis(-90, Vector3.forward);
instance.AddForce(transform.right * bulletSpeed);
}
//shoot down
if (Input.GetKeyDown(KeyCode.S) && Time.time > nextFire){
nextFire = Time.time + fireRate;
Rigidbody instance;
instance = Instantiate(projectile, transform.position, transform.rotation) as Rigidbody;
instance.transform.rotation = Quaternion.AngleAxis(180, Vector3.right);
instance.AddForce(transform.up * -bulletSpeed);
}
//shoot right
if (Input.GetKeyDown(KeyCode.D) && Time.time > nextFire){
nextFire = Time.time + fireRate;
Rigidbody instance;
instance = Instantiate(projectile, transform.position, transform.rotation) as Rigidbody;
instance.transform.rotation = Quaternion.AngleAxis(90, Vector3.forward);
instance.AddForce(transform.right * -bulletSpeed);
}
}
}
@Quags - I posted an answer 4 hours ago. But the question is acting strange. It lists the number of answers a '-1' and is still appearing on the unanswered list. Here is a copy of my answer posted in as a comment:
using UnityEngine;
using System.Collections;
public class Createor : $$anonymous$$onoBehaviour {
public GameObject ThePrefab;
private float fireRate = .15f;
private float nextFire = 0;
private float bulletSpeed = 500f;
void Update () {
GameObject instance;
//shoot up
if (Input.Get$$anonymous$$eyDown($$anonymous$$eyCode.W) && Time.time > nextFire){
nextFire = Time.time + fireRate;
Debug.Log ("nf" + nextFire);
instance = Instantiate(ThePrefab, transform.position, transform.rotation) as GameObject;
instance.rigidbody.AddForce(transform.up * bulletSpeed);
}
//shoot left
if (Input.Get$$anonymous$$eyDown($$anonymous$$eyCode.A) && Time.time > nextFire){
nextFire = Time.time + fireRate;
instance = Instantiate(ThePrefab, transform.position, transform.rotation) as GameObject;
instance.transform.rotation = Quaternion.AngleAxis(-90, Vector3.forward);
instance.rigidbody.AddForce(transform.right * -bulletSpeed);
}
//shoot down
if (Input.Get$$anonymous$$eyDown($$anonymous$$eyCode.S) && Time.time > nextFire){
nextFire = Time.time + fireRate;
instance = Instantiate(ThePrefab, transform.position, transform.rotation) as GameObject;
instance.transform.rotation = Quaternion.AngleAxis(180, Vector3.right);
instance.rigidbody.AddForce(transform.up * -bulletSpeed);
}
//shoot right
if (Input.Get$$anonymous$$eyDown($$anonymous$$eyCode.D) && Time.time > nextFire){
nextFire = Time.time + fireRate;
instance = Instantiate(ThePrefab, transform.position, transform.rotation) as GameObject;
instance.transform.rotation = Quaternion.AngleAxis(90, Vector3.forward);
instance.rigidbody.AddForce(transform.right * bulletSpeed);
}
}
}
@robertbu - about half an hour ago I changed @Quags' answer to this question to comment in moderation queue. I got 'page does not exist' error and entry is still visible for me in moderation, but now only with 'send message' option.
At the time I was doing it, your answer wasn't visible for me. I don't have a clue why... $$anonymous$$oreover - now I see 'show 2 more replies' under your comment, but clicking on the link reveals nothing.
This looks like some QATO bug.
Answer by robertbu · Aug 27, 2013 at 12:28 PM
Here's a quick edit:
using UnityEngine;
using System.Collections;
public class Createor : MonoBehaviour {
public GameObject ThePrefab;
private float fireRate = .15f;
private float nextFire = 0;
private float bulletSpeed = 500f;
void Update () {
GameObject instance;
//shoot up
if (Input.GetKeyDown(KeyCode.W) && Time.time > nextFire){
nextFire = Time.time + fireRate;
Debug.Log ("nf" + nextFire);
instance = Instantiate(ThePrefab, transform.position, transform.rotation) as GameObject;
instance.rigidbody.AddForce(transform.up * bulletSpeed);
}
//shoot left
if (Input.GetKeyDown(KeyCode.A) && Time.time > nextFire){
nextFire = Time.time + fireRate;
instance = Instantiate(ThePrefab, transform.position, transform.rotation) as GameObject;
instance.transform.rotation = Quaternion.AngleAxis(-90, Vector3.forward);
instance.rigidbody.AddForce(transform.right * -bulletSpeed);
}
//shoot down
if (Input.GetKeyDown(KeyCode.S) && Time.time > nextFire){
nextFire = Time.time + fireRate;
instance = Instantiate(ThePrefab, transform.position, transform.rotation) as GameObject;
instance.transform.rotation = Quaternion.AngleAxis(180, Vector3.right);
instance.rigidbody.AddForce(transform.up * -bulletSpeed);
}
//shoot right
if (Input.GetKeyDown(KeyCode.D) && Time.time > nextFire){
nextFire = Time.time + fireRate;
instance = Instantiate(ThePrefab, transform.position, transform.rotation) as GameObject;
instance.transform.rotation = Quaternion.AngleAxis(90, Vector3.forward);
instance.rigidbody.AddForce(transform.right * bulletSpeed);
}
}
}
Your answer
Follow this Question
Related Questions
Cinemachine camera rotating with player 2D 1 Answer
Multiple Cars not working 1 Answer
Transform.translate bullets problem 0 Answers
OnTriggerEnter2D with multiple objects 0 Answers