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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:54:06