使用panda3d实现能跟随人物移动的第三人称带碰撞的相机,并使其可以通过鼠标控制朝向,给出代码。
时间: 2023-03-15 13:15:10 浏览: 173
这个问题很复杂,但是你可以参考以下代码片段:from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser,CollisionNode
from panda3d.core import CollisionHandlerQueue,CollisionRay # 创建基本程序对象
base = ShowBase() # 创建碰撞空间
base.cTrav = CollisionTraverser() # 创建碰撞线
pickerNode = CollisionNode('mouseRay')
pickerNP = base.camera.attachNewNode(pickerNode)
pickerNode.setFromCollideMask(CollideMask.bit(1))
pickerRay = CollisionRay()
pickerNode.addSolid(pickerRay) # 创建碰撞处理器
pickerHandler = CollisionHandlerQueue()
base.cTrav.addCollider(pickerNP, pickerHandler) # 设置相机碰撞
base.camera.setCollideMask(CollideMask.bit(1)) # 在鼠标按下事件中更新碰撞线的位置
def mouse_click(button):
if button == MouseButton.one:
mpos = base.win.getPointer(0)
pickerRay.setFromLens(base.camNode, mpos.getX(), mpos.getY())# 注册鼠标点击事件
base.accept('mouse1', mouse_click) # 在每一帧中更新相机
def update_camera(task):
base.cTrav.traverse(render)
if pickerHandler.getNumEntries() > 0:
pickerHandler.sortEntries()
pickedObj = pickerHandler.getEntry(0).getIntoNodePath()
base.camera.reparentTo(pickedObj)
return Task.conttaskMgr.add(update_camera, 'updateCamera')
base.run()
阅读全文