为了理解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度,然后看起来就不连续了。我猜这是由于旋转差异是不连续的 - Blender Math Types & Utilities文档没有说明任何内容,而我还没有考虑足够多的四元数表示法,以查看是否可能存在连续的映射 - 我想有一种更优雅的方法来实现局部Z方向连续地依赖于鼠标,而局部X和Y方向连续地依赖于某个给定的向量,但是怎么做呢?