Blender の Python ゲーム スクリプトを理解するために、私は現在、このリンクの FPSController 構造を使用して、球体の周りを歩くことができるシーンを構築しようとしています。重力と FPSController の向きについては、現在次のような python Controller を作成しようとしました。
def main():
print("Started")
controller = bge.logic.getCurrentController()
me = controller.owner
distance, loc, glob = me.getVectTo((0,0,0))
grav = controller.actuators['Gravity']
strength = me['Gravity']
force = strength*(distance*distance)*glob
grav.force = force
try:
rot = Vector((0,0,-1)).rotation_difference(glob).to_matrix()
except Exception as E:
print(E)
rot = (0,0,0)
rotZ = me.orientation
me.orientation = rot*rotZ
controller.activate(grav)
main()
これは、任意の角度が 180 度を超えるまで大まかに機能し、不連続に見えます。これは、rotation_difference が不連続であることから来ていると思います – Math Types & Utilities に関するブレンダーのドキュメントには何も書かれていません。また、四元数表現についてまだ十分に考えていないため、連続したマップが可能かどうかを確認できませんでした – もっとエレガントな方法があると思いますローカルの Z 方向は常にマウスに依存し、ローカルの X 方向と Y 方向は特定のベクトルに継続的に依存するようにするにはどうすればよいでしょうか?