I was doing similar things recently and got it working. What you are talking about sounds strange to me because the "empty object" you mention sounds more like Unity's empty game object instead of Blender's empty, but anyway, if you want to parent anything to a bone in Blender, select only that bone in pose mode, go select the object, then shift select the bone, press ctrl+p you should see a menu which allows you to parent the object to just the bone. In the case of Unity, you just parent the object's transform to the bone's transform. If your armature is humanoid, you can find the right-hand bone with Animator.GetBoneTransform method.
you just need to use the module, because it is for the game engine. So your problem is: you used blender python, but not bge python. Try to reach the camera with bge. ... so this should work:cam = bge.logic.getCurrentScene().active_camera
import bge
def main():
cam = bge.logic.getCurrentScene().active_camera
obj = bge.logic.getCurrentController().owner
obj.worldPosition.y = cam.worldPosition.y
obj.worldPosition.z = cam.worldPosition.z
main()
(Attach this script to your 'HitBox' with a true triggered always sensor so it can cycle forever.)
Other solution: You can try to make vertex parent to your player.