Web Shooter Project
- Ryan Nicholson
- Jun 15
- 6 min read
Current Ideas:
First one is a grappling / Web slinging system which I would easily be able to turn into a game.
The game would be like those mobile web slinging games except this would be a 3D first person aim experience if it were to be turned into a game or a game where you freely swing around places or a game where you swing around but with each location to swing its a quick time event. Using different games which include a grapple like system which you can use to create a web slinging system. I’ve mainly looked at spiderman and batman which both have different ways of looking traversal using a grapple system. Batman had a more free version of grappling compared to spider man which has a more choose for you like system where it chooses the web swinging location other than when you choose to edit your web slinging like to fling yourself or go to land that involves actual input from the player or they aim at a certain location whereas Batman has a lock on system but its only on corners or edges which still involved aim.



Second one is a car system which I mainly want to be used in a drift sense. This could also be a game with either just an open world exploration game like a foundation Forza Horizon with a drift xp goal. I looked at some driving games to test how I would like it, I then tried to use the UE4 car start project but I felt I couldn’t expand enough on it and also it would be out of my skill range to build it from the ground up







I am going to choose the grapple system as I believe that it is something more prone to my abilities but will still challenge me and will also be a better piece to have on my catalogue and will allow me to fully perfect it.
First Attempt:
First thing I do is create a socket on the hand of the Mannequin and name it “swing” and then I will use this later.

So on event begin play I set a timer by event which lasts 1 second and the event connected is a custom event I named LockForSwingPoint which then connects to MultiSphereTraceForObjects. The start position is connected to the “GetActorLocation” and then for the End vector is connected to a “GetActorRotation” which connects to a “GetForwardVector” which connects to a Vector x Float which times it by 100 which then goes to a Vector + Vector which adds the multiplication we just did to the “GetActorLocation” which then plugs into the end vector, the object type is connected to a “MakeArray” which has the Object Type SwingPoint which I made myself. The MultiSphereTraceForObjects is then connected to a branch with the condition being the “Return Value” on the MultiSphereTraceForObjects which then from false it connects to the Set “Can Swing” Boolean and sets it false. The true part connects to “Cast To SwingPoint” which is a blueprint with just a sphere collision inside. The object of that cast plugs into the “Hit Actor” and the node of “Hit” connects to a “Get” which then connects to the “Out Hits” array of MultiSphereTraceForObjects. From there it prints out a string saying Hello so I know if it is working. It then goes to a “GetActorLocation” which plugs into a “Set Swing Location” which is a custom Vector Variable I made, I then have the Get Actor location Z and the Set Swing Location Z connect to a > (More than) into a Branch as the condition which then if true sets “Can Swing” to false and if false sets it to true


To start I got the left mouse button and attached it to a sequence which will then connect to other nodes. The third part of the sequence “Then 2″ is connected to a branch with a “Can Swing” condition. The true then plugs into a “Play anim montage” which is a animation montage of a web slinging animation I downloaded which im playing at 3x speed because it was too slow otherwise. I then plug that into “Set Hidden In game” and the target is the Cable connected to the custom socket I made where I have the cable connected to. I set the “new hidden” boolean to false so that it can still be visible. I then connect it to a “SetWorldLocation” and connect the cable to the target and connect the “Swing Location” from above to it. I then connect it to Set “End Location” which has the Swing Location connected to it. It then connects to the Exec part of the Set “New Cable Length” which has “GetActorLocation” Vector - Vector with the other vector being “Swing Location” the = then enters “VectorLength” Float - Float which negates the number we just calculated by 900 which decides how long ill be making the wire, negating 900 helps the cable not be too long. This then plugs into the set. The set the connects to another set but for Set “Cable Length” and this is just set to 0 which then sets “Attached” boolean to true which then casts to “ThirdPerson_AnimBP” which has its object connected to “Get anim instance” which then connects to “Mesh” of the Third person character. This then sets “swinging” to true and connects its target to the cast.



I have the sequence from the left click release connecting to a branch with a “attached” boolean condition which then from the true it connects to “Launch Character” the launch velocity is connected to a “Get Velocity” (Of Self) which has it return value connected to a Vector + Vector, with the addition being +350 Z which then the = plugs into the launch velocity. From the Launch Character it then sets Attached Boolean to false and sets “End Location” with the target of the cable to 0 on all of it. The cable and the Exec from the Set connects to Set Hidden In Game and sets the “New Hidden” boolean to true” which hides the cable in game, this then connects to “set Air Control” to 0.6 with the target being “Character Movement” which then connects to “Cast to ThirdPerson_AnimBP” which has its object being “Get Anim Instance” connected to Mesh” (Player Mesh) and then this sets “swinging” to false and has the target connected to “As Third Person Anim BP”

I created my own function by going to the plus by the functions + and then I named it Calculate Swing Force. From the start of the node I connected it to a “Branch” with a condition of the boolean “Attached” the true then connects to “Set Hidden In Game” Target being cable which connects to Target and the “New Hidden” is false which means it is visible. This then connects to “SetWorldLocation” which also has its target as Cable. The “New Location” is set as the “swing location” which is set in the Event Graph. This then Sets “End Location” by getting the “Socket Transform” from the Third Person Character “Mesh” the socket name being “swing” which we made earlier, the transform space is set as RTS Actor and then the “Return Value Location” connects to “End Location” The target is connected to the Cable. Then we Set Cable Length by connecting it to “Get New Cable Length” which is set in Event Graph, the Target also being Cable. This then connects to Add Force with the target being “Character Movement” and the force is set by “Get velocity” which then connects to a “dot” node which returns the dot product of two 3d vectors. The second part of the “dot” part is “GetActorLocation” vector - vector, second vector negates “Swing Location” the equals then goes into the dot and into “Normalize” with a tolerance of 0.0001. The normalize return value goes into a “Vector x Float” and the float is the return value of the “dot” the return value of the Vector x Float goes into another Vector x Float and the float is -2 with the return value entering force. which then connects to a “Set Air Control” to 2 with the target being Character Movement

Then we get an Event Tick into the node which runs the function. Which means every tick ( A single tick represents one hundred nanoseconds or one ten-millionth of a second )


This slightly works but it doesn’t stick to the blocks in frame but sticks to the blocks closest which would usually work in a webslinger game but I want this game to have a lot of freedom for the players where they can swing everywhere they want instead of having to manually placing swing locations.
What I need in the project:
Sounds for shooting webs: https://www.youtube.com/watch?v=hlLUa1-1SUk https://www.youtube.com/watch?v=DWux90zL2q4 https://youtu.be/fkJmOUo1Z_Q?t=252
Sounds for swinging: https://www.youtube.com/watch?v=DWux90zL2q4 https://youtu.be/fkJmOUo1Z_Q?t=252
Sounds for releasing webs: https://www.youtube.com/watch?v=DWux90zL2q4 https://youtu.be/fkJmOUo1Z_Q?t=252
Sounds for wall running: https://www.youtube.com/watch?v=DWux90zL2q4 https://youtu.be/fkJmOUo1Z_Q?t=252
Sound for boost web pull: https://www.youtube.com/watch?v=DWux90zL2q4 https://youtu.be/fkJmOUo1Z_Q?t=174

Dot which shows web location:

Wall Running When Close To A Wall: https://youtu.be/fkJmOUo1Z_Q?t=134 https://youtu.be/DWux90zL2q4?t=39 https://youtu.be/fkJmOUo1Z_Q?t=252
Web Pull To Climb Onto A Ledge: https://youtu.be/fkJmOUo1Z_Q?t=21
Zoom In and out when releasing a web: https://youtu.be/DWux90zL2q4?t=35
Wind Flowing Visual To Indicate Speed: https://youtu.be/fkJmOUo1Z_Q?t=165
Special Animations: https://youtu.be/fkJmOUo1Z_Q?t=169 https://youtu.be/fkJmOUo1Z_Q?t=252
Keep Where Web Is Shot On Hand: https://youtu.be/fkJmOUo1Z_Q?t=167
Boost Web Pull For Extra Speed: https://youtu.be/fkJmOUo1Z_Q?t=174
Camera Pull Back: https://youtu.be/fkJmOUo1Z_Q?t=174
Gain Momentum When Falling: https://youtu.be/fkJmOUo1Z_Q?t=190
Turn Corner Web: https://youtu.be/fkJmOUo1Z_Q?t=252


Comments