Input, Sounds, Guns and Collision - Ben Bissett


Benjamin Bissett

06/13/2025

This week, my primary objective was to implement core features for a testing map in a third-person shooter. I began by setting up an input mapping context with 15 input actions corresponding to the systems we planned to integrate. Then, I created a player controller, binding all inputs and establishing delegates to broadcast message information. My goal was to ensure easy access for my team while maintaining modularity and extensibility. Next, I developed a Controls UI screen that allows for seamless modification of key bindings while remaining visually appealing and user-friendly.

My next major task was configuring a base weapon and introducing the first weapon actor—the C7 assault rifle. This firearm supports attachments and customization, which will be expanded in the future using static mesh components attached to socket locations. I added a weapon socket to the player and updated the animation blueprint, enabling the character to instantiate and wield a rifle. I then implemented an attack functionality using a ray cast/hit-scan projectile and set up a player character collision component to register hits and apply damage to the health system.

My last and easiest task was implementing the main menu soundtrack and the sound effects for the weapon firing. I created two meta sounds and learned how to set them to be a 2d looping track for the menu and a 3d one-shot SFX for the gunshot. Once I created the assets I ran into an issue where I was unable to reference my sounds in the parent classes as an UMetaSound and instead found that I had to declare them as a USoundBase. Though this caused issues I was able to work through the issue by attempting multiple different solutions to the problem and by reading a forum on implementation of meta sounds in C++.

Throughout the process, I collaborated closely with teammates, analyzing their code and designs to ensure seamless integration. I encountered an issue when transitioning the player character from the legacy input system to the enhanced input system—an oversight where I failed to bind the input mapping context to the input component. Using logging, I identified the failure point and resolved it. Another challenge arose when I forgot to mark my functions with UFUNCTION while binding them to an input. Since this error did not produce a direct failure, it was more difficult to diagnose, as the delegates simply didn’t respond. By leveraging logging and referencing Unreal Engine documentation, I found a helpful post that highlighted my mistake, allowing me to quickly apply the fix.

Leave a comment

Log in with itch.io to leave a comment.