Create a child of BP_N00dProjectilesBase, BP_N00dProjectilesFlyByBase, name them BP_ProjectileBase and BP_ProjectileFlyByBase repectively, and move it into n00dProjectilesExample
Traits modify how a projectile performs in certain contexts. You can be as specific or as minimalist as you want with these, or don't need to include them at all and just use the base defaults. They will add variety to your projectiles, modularly. They can also be manipulated at runtime, so you can perform upgrades to your projectiles in-game, if you want.
Create a folder called Data
Right-click inside this folder and create a new data asset, pick PDA_N00dProjectilesTrait.
Call it DA_Propellant200
This data asset will represent a load of propellant that goes into a shell. Set the initial speed to 200 and max to 150
Create another one and call it DA_HeavyShell, fill the details out as depicted
Create another and call it DA_ArrowDrag, fill out the details as depicted
Create as many of these as you want, you could create ones for arrows types, or cannon balls for driving force. We will just create these for the example
Create a folder called Projectiles, child BP_ProjectileBase, call it BP_ProjectileBullet and move it into the Projectiles folder. Inherit instead from FlyBy if you want this bullet to have SFX for near misses
Open it up, select the Mesh component, and define the mesh
You might also want to define the trail of the bullet with your preferred particle system of choice
Fill out the defaults however you see fit.
Max and Initial Speed are affected by Traits, which we have defined here with DA_HeavyShell and DA_Propellant200
This means that you could have a single "bullet base" and create instances of the bullet that define different traits that represent bullet types, like the specifications of 7.62mm or 5.56mm. You may get as granular as you want, and reuse the data assets across your instances.
Go ahead and define this class in the turret. Test if you'd like
In the plugin's Core folder, create a child of BP_N00dProjectilesEmbedded and call it BP_EmbeddedArrow. Move it into a newly created Embedded folder in our example folder structure
In the class defaults, define the StaticSpawn mesh and the delay that it should be destroyed
Create another child of BP_ProjectileBase, call it BP_ProjectileArrow, and move it into the Projectiles folder
Open the new BP and select the mesh, define the mesh
Move the mesh forward 10 on the X axis. Your arrow might not need this but it creates the illusion of sinking into the hit object
Fill out the defaults how you'd like. Because this is an arrow, we will also flag RotateMeshByVelocity which will manipulate the arrow mesh rotation to follow its arc
Also, define BP_EmbeddedArrow in the EmbeddedActorClass
Press PIE and see how it looks. We have arrows now sticking into our character mesh!