Announcement

Collapse
No announcement yet.

2D Top Down Shooting

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    2D Top Down Shooting

    Hey! I'm making 2D top down game (Everything is using sprites). So I have a character and I wanted him to shoot projectiles in a direction pointed by mouse click. I have no idea how can I do this. I know that I need to assign a traceline between my character and direction pointed by mouse then spawn projectile in this direction. Is there any way to make it?

    Click image for larger version

Name:	Idea.jpg
Views:	374
Size:	73.3 KB
ID:	1726340
    Last edited by FL1PPY19; 02-26-2020, 07:01 PM.

    #2
    Originally posted by FL1PPY19 View Post
    Hey! I'm making 2D top down game (Everything is using sprites). So I have a character and I wanted him to shoot projectiles in a direction pointed by mouse click. I have no idea how can I do this. I know that I need to assign a traceline between my character and direction pointed by mouse then spawn projectile in this direction. Is there any way to make it?

    Click image for larger version

Name:	Idea.jpg
Views:	374
Size:	73.3 KB
ID:	1726340
    You'll need GetHitResultUnderCursor and LineTraceByChannel. I don't know which axis we're looking from in the picture above, but naturally that axis must be set to zero when doing the trace, because you want 2D.
    Check out Zof ( puzzle game ) on Steam:

    https://store.steampowered.com/app/1414480/Zof/

    Comment


      #3
      I don't recall exactly the function name but you can project the mouse in World so you get the "hit point".
      You also have something called: Convert Mouse Location to World Space

      Both solution should help you.

      Comment


        #4
        My axis are X and Y. I did something like this and I don't know what to do with this next. I placed those nodes in my character blueprint.

        Click image for larger version

Name:	traceline.JPG
Views:	248
Size:	111.4 KB
ID:	1727183

        Comment


          #5
          Ok, so I did something like that (Screen below). The main problem is that I want to trace in a DIRECTION clicked by mouse, not to THIS specific place. And I also have another problem. I made a print string to see which actor did i hit. When I'm clicking on the enemy, string always tells me that i hit my tilemap. I also have a few cubes on my tilemap to see how AI works along with Nav bounds. When i click on those cube, string printing correct name (cube).

          Click image for larger version

Name:	traceline3.JPG
Views:	287
Size:	84.2 KB
ID:	1727228
          Click image for larger version

Name:	traceline2.JPG
Views:	327
Size:	168.3 KB
ID:	1727229

          Comment


            #6
            Well, by converting the mouse location to a point in the world you have half the equation. The other half is to now get your actor location that you're controlling, and use the node find lookatatrotation. Plug the vector3 of the actor location and the vector3 of the mouse hit position into it, it will give you the rotation needed to make your actor face in that direction. You can further split out the rotation structure as you only need the z rotation if you don't care about aiming up or down vertically in a top-down shooter. Use that to set your actors rotation on Z(Yaw?) and presto, you're dude will look where ever the mouse is located.

            Using this you don't actually need the line trace by channel. just the hit result location from get hit result under mouse cursor by channel. This plugged into tick will make it so he always follows your cursors location (as long as there's something underneath the mouse for it to hitscan such as a floor with collision on whatever trace channel you use set to block.

            Then just make it so mouse1 causes him to shoot from the forward vector of the player actor.
            Indie Dev - Whiskey Cat Softworks
            Currently developing a colony survival game!

            https://twitter.com/WSoftworks https://www.facebook.com/WhiskeyCatSoftworks/

            Comment


              #7
              So I did something like this but my "bullet" flies from weird posiotion. And one more question. What if have character look like it does in a picture? Then I'll need to set different sprites to different angles?

              Comment


                #8
                Change the location of spawnactor BP spell to be either your players location or get world location of something such as an arrow component parented to your player character (by default its set to hidden in game so you won't see it ingame unless you uncheck it). You'd use get forward vector to make a rotation from it, but perhaps a simpler method for you would be to get the said arrows world rotation and plug that into the roation of your spawnactor BP spell.

                Since you're doing 2d sprites, I'd imagine you actually don't want to rotate the actor since that rotates the player sprite to be wrong/upside down, sorry about that. Instead you can use it to set the world rotation of the mentioned arrow component of your player character as an example, as long as your sprite isn't a child of the arrow in the hierarchy.
                Indie Dev - Whiskey Cat Softworks
                Currently developing a colony survival game!

                https://twitter.com/WSoftworks https://www.facebook.com/WhiskeyCatSoftworks/

                Comment


                  #9
                  I tried something like this and... it worked! Thanks a lot Now I'm thinking of changing all my graphics to TOP but I don't know yet. If I won't find a solution to change sprites depending on cursor location then I'll change it.

                  Comment

                  Working...
                  X