How can I get the surface normal's rotation in collision?

I’ve found the solution to calculating the angle of impact in blueprint, so I thought I’d come back here and post it for anybody who finds this question.

theta(angle between vectors a & b) = acos( dot(a,b) )

So here I use a Dot Product node, and input the forward vector from my projectile, and the impact normal of the hit result (from a trace or hit event). Then I take the Acos(degrees) node to output the angle in degrees.

That’s it!

Then (if the angle is valid) to rotate the projectile to match the surface normal rotation at the location of impact, I first move the projectile to the point of impact, then use the Find Look at Rotation node to rotate the projectile to face the wall.

To make it look like the projectile sticks, you will also have to disable any movement and physics.