为了理解 blender python 游戏脚本,我目前尝试使用此链接中的 FPSController 结构构建一个可以绕球体行走的场景。对于重力和 FPSController 方向,我尝试构建一个 python 控制器,目前看起来像这样:
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 是不连续的——关于数学类型和实用程序的搅拌机文档没有说明任何内容,而且我对四元数表示还没有充分考虑到是否可以使用连续映射——我想有一种更优雅的方式实现局部 Z 方向持续依赖于鼠标,而局部 X 和 Y 方向持续依赖于某个给定向量,但是如何实现呢?