法線との内積だから上手くいくはずだぞ、
ちなみに地面の角度に沿って移動するのを前提とした話であって
めり込むとかそういうのは別問題
あとHGIMGは左手系だったのね、使ったこと無いから右手系だと勝手に思い込んでたわ
だったらP=(px,0,pz)に変えて
speed += k*(nx*px+nz*pz)
とすればおk