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
相关产品推荐
相关产品推荐

