Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 11 Next capture
2021 2022 2023
1 capture
11 Jun 22 - 11 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Mnaekmer · Jul 12, 2015 at 11:20 AM · shootingbullets

2D Character Shooting

I'm still learning C#, I'm new to Unity, and I've been trying to piecemeal code together to make my character shoot for days now so there might be some erroneous code mixed in here. My character can move both directions, jump and double jump, and I've gotten it so it will shoot in the direction I'm traveling but only while the direction button is being pressed down(if I'm not moving when I shoot, then the projectile just sits in place on the screen), and it travels the exact speed my player is traveling (this is probably because I resorted to using my player movement code for the projectile since I couldn't get anything else to work).

I can't figure out how to code it so it will fire with a fixed velocity in the direction my player is facing instead of the way they are traveling. My character can turn left and right and I'm trying to get the direction he shoots to flip left and right accordingly without having to actually be traveling in that direction (ie standing still).

I would really appreciate it if anyone could help me with this. Thank you!

I created a "weapon" object and put a "projectile" child object under it. Right now the projectile script is attached to the projectile object.

Here is the script that is attached to the Player:

 using UnityEngine;
 using System.Collections;
 
 public class charactercontroller : MonoBehaviour {
     public float maxSpeed = 10f;
     bool facingRight = true;
 
     Animator anim;
 
     bool grounded = false;
     public Transform groundCheck;
     float groundRadius = 0.2f;
     public LayerMask whatIsGround;
     public float jumpForce = 10000f;
     bool doubleJump = false;
     // Projectile
     public GameObject Projectile;
     public float attackSpeed = 0f;
     public float coolDown = 0;
     public float yValue = 1f; 
     public float xValue = 0.2f; 
 
     void Start()
     {
         anim = GetComponent<Animator> ();
 
     }
     
     
     void FixedUpdate () 
     {
         grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);
         anim.SetBool ("Ground", grounded);
         // When can you doubleJump
         if (grounded)
             doubleJump = false;
 
         anim.SetFloat ("vSpeed", GetComponent<Rigidbody2D> ().velocity.y);
         float move = Input.GetAxis ("Horizontal");
         // Set Character so it can't change direction while in the air.
         if (!grounded && !doubleJump)
             return;
             
         anim.SetFloat ("Speed", Mathf.Abs (move));
 
         GetComponent<Rigidbody2D> ().velocity = new Vector2 (move * maxSpeed, GetComponent<Rigidbody2D> ().velocity.y);
 
         if (move > 0 && !facingRight)
             Flip ();
         else if (move < 0 && facingRight)
             Flip ();
 
 
 
     }
 
     void Update()
     {
         // Enable jump and double jump
         float move = Input.GetAxis ("Horizontal");
         if ((grounded || !doubleJump) && Input.GetKeyDown (KeyCode.Space)) {
             anim.SetBool ("Ground", false);
             GetComponent<Rigidbody2D>().AddForce(new Vector2(move, jumpForce));
 
             if(!doubleJump && !grounded)
                 doubleJump = true;
         }
         if (Time.time >= coolDown)
         {
             if (Input.GetKeyDown (KeyCode.DownArrow)) 
             {
             Fire();
             }
         }
     }
 
     void Fire()
     {
 
         // Make a bullet with the same position and rotation as the player
         Rigidbody2D pPrefab = Instantiate (Projectile, new Vector3(transform.position.x + xValue, transform.position.y + yValue, transform.position.z), transform.rotation) as Rigidbody2D;
         pPrefab.GetComponent<Rigidbody2D>().AddForce(transform.up * maxSpeed);
         // Wait 1 seconds
         coolDown = Time.time + attackSpeed;
 
     }
         
 
 //    }
     void Flip()
     {
         facingRight = !facingRight;
         Vector3 theScale = transform.localScale;
         theScale.x *= -1;
         transform.localScale = theScale;
     }
 
 }


And here is the code that is attached to my projectile object:

 using UnityEngine;
 using System.Collections;
 
 public class Projectile : MonoBehaviour {
     bool facingRight = true;
     public float speed = 1f;
     /*Total time to wait*/
     public float timeToDestroy = 5f;
     /*Total elapsed time to destroy*/
     public float elapsedTimeToDestroy;
 
     float move = Input.GetAxis ("Horizontal");
     void Start ()
     {

         GetComponent<Rigidbody2D> ().velocity = new Vector2 (move * speed, GetComponent<Rigidbody2D> ().velocity.y);
 
     }
     void FixedUpdate ()
     {
         if (move > 0 && !facingRight)
             Flip ();
         else if (move < 0 && facingRight)
             Flip ();
         transform.Translate(0, 0, speed);
         elapsedTimeToDestroy += Time.deltaTime;
         if (elapsedTimeToDestroy >= timeToDestroy)
         {
             Destroy(gameObject);
         }
 
     }
     
     void Flip()
     {
         facingRight = !facingRight;
         Vector3 theScale = transform.localScale;
         theScale.x *= -1;
         transform.localScale = theScale;
     }
 }













Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

2 People are following this question.

avatar image avatar image

Related Questions

shooting raycast 1 Answer

fps shooting enemy 1 Answer

How to make bullets spread in unity2D? 0 Answers

How to make 2d shooting towards the mouse but have it continue in staright line afterwards? 1 Answer

Shooting with Limited Ammo 2 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges