Ursina引擎敌方碰撞报错排查及子弹朝向玩家面朝方向设置问题
报错原因说明
该问题属于代码编写错误,不是Ursina引擎bug。
Ursina的destroy()函数参数规则为:第一个参数是待销毁的实体对象,第二个参数是延迟销毁的时间(数值类型)。你在碰撞逻辑里直接把enemy实体作为第二个参数传入destroy(bullet, enemy),引擎内部尝试把传入的实体对象当作时间数值计算时,就抛出了类型不匹配的报错。
如果要同时销毁子弹和敌人,分开调用两次destroy()即可,把碰撞逻辑里的对应代码修改为:
destroy(bullet) destroy(enemy)
同时建议给碰撞判断补充enemy存在的校验,避免敌人被销毁后触发空对象报错:
if bullet and enemy and bullet.intersects(enemy).hit:
子弹发射方向设置方法
你当前代码的子弹朝向没有和玩家/相机朝向同步,只需要在子弹脱离UI父级后,同步其朝向为相机当前朝向,再用相机前向计算飞行路径即可,修改后的子弹生成逻辑如下:
def input(key): global bullet if key == 'left mouse down': bullet = Entity(parent=weapon, model='cube', scale=.1, color=color.black, collider='box') bullet.world_parent = scene # 同步子弹朝向为玩家当前视角朝向 bullet.rotation = camera.rotation # 用相机前向作为子弹飞行方向 bullet.animate_position(bullet.position + (camera.forward * 500), curve=curve.linear, duration=2) destroy(bullet, delay=2)
内容的提问来源于stack exchange,提问作者Migs Panganiban
相关产品推荐
相关产品推荐

