You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ursina游戏开发:无法获取玩家当前位置及设置初始位置问题

Ursina迷宫游戏玩家位置与初始位置问题解决

问题1:按下R键打印位置始终为Vec3(0,0,0)

原因:你自定义的Player类是独立的Entity实例,但实际负责玩家移动的是内部的FirstPersonController对象。你当前打印的是Player自身的position,而这个Entity并未跟随控制器同步移动,所以始终显示初始的(0,0,0)。

解决方法:

  • 修改输入逻辑,打印内部FirstPersonController的位置:
    def input(self, key):
        if key == 'r':
            print(self.controller.position)
    

问题2:玩家初始位置处于墙内且无法修改

原因:FirstPersonController默认初始位置为(0,0,0),如果初始化时未指定自定义位置,控制器会生成在默认坐标,恰好与迷宫墙重叠。另外,若你尝试修改Player类的position,由于控制器是独立实例,并不会同步更新其位置。

解决方法:

  • 在Player类初始化时,直接给FirstPersonController传入目标初始位置:
    class Player(Entity):
        def __init__(self, spawn_position=(3, 0, 3), **kwargs):
            super().__init__()
            # 初始化控制器时指定出生位置
            self.controller = FirstPersonController(position=spawn_position)
    
  • 确认spawn_position坐标不在迷宫墙的碰撞范围内,可提前通过打印墙的位置来规划安全出生点。

更简洁的替代方案

直接让Player类继承FirstPersonController,避免嵌套实例带来的层级问题:

from ursina import *

class Player(FirstPersonController):
    def __init__(self, position=(3, 0, 3), **kwargs):
        super().__init__(position=position)

    def input(self, key):
        super().input(key)  # 保留原控制器的输入响应逻辑
        if key == 'r':
            print(self.position)  # 直接打印自身位置即可

app = Ursina()
# 迷宫墙创建逻辑...
player = Player()
app.run()

内容的提问来源于stack exchange,提问作者Mihai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:05:08