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

运行Ursina游戏引擎时触发AssertionError:!mat.is_nan()的原因是什么

问题原因
  • 你遇到的AssertionError: !mat.is_nan()是Ursina底层依赖的Panda3D渲染引擎抛出的错误,含义是渲染变换矩阵计算时出现了非数值(NaN),不属于底层引擎的核心Bug,是内置SmoothFollow组件的适配问题。
  • 触发原因有两个:
    1. 你创建的50个链式跟随的Entity初始位置全部默认为(0,0,0),前一个实体还未完成第一帧的位置计算,就被后一个实体绑定为跟随目标,链式累加后出现计算溢出。
    2. SmoothFollow默认的跟随参数没有适配大量实体链式绑定的场景,多帧延迟叠加后生成了无效的变换矩阵。
解决方法

方案1:调整初始化参数

给每个实体设置错开的初始坐标,同时给SmoothFollow显式指定speed参数即可解决,修改后可运行代码如下:

from ursina import *

# 把app初始化移到update函数前面,避免组件绑定时序问题
app = Ursina()

def update():
    global dy
    player.y += dy
    if abs(player.y)>= 3:
        dy = -dy

player = Entity(model='quad', scale=1, x = -4.5, texture = 'dragon_head.png')
e = [None]*50
dy =.08

# 给第一个跟随点设置初始x坐标,和玩家位置对齐
e[0] = Entity(model='circle', scale = .2, color = color.green, x=-4.2)
e[0].add_script(SmoothFollow(target = player, offset=(.3, 0, 0), speed=10))

for i in range(1,50):
    # 每个点初始x坐标依次错开,避免初始位置重合
    e[i] = Entity(model='circle', scale = .2, color = color.green, x=-4.2 + i*0.2)
    e[i].add_script(SmoothFollow(target = e[i-1], offset=(.2, 0, 0), speed=10))

app.run()

方案2:自定义跟随逻辑

如果修改参数后仍然报错,可以弃用内置SmoothFollow组件,自己写逐帧跟随逻辑,可控性更高:

from ursina import *

app = Ursina()
follow_smooth = 0.1 # 跟随平滑度,数值越小越平滑

def update():
    global dy
    player.y += dy
    if abs(player.y)>= 3:
        dy = -dy
    # 逐帧更新每个点的位置
    e[0].x += (player.x + 0.3 - e[0].x) * follow_smooth
    e[0].y += (player.y - e[0].y) * follow_smooth
    for i in range(1,50):
        e[i].x += (e[i-1].x + 0.2 - e[i].x) * follow_smooth
        e[i].y += (e[i-1].y - e[i].y) * follow_smooth

player = Entity(model='quad', scale=1, x = -4.5, texture = 'dragon_head.png')
e = [None]*50
dy =.08
for i in range(0,50):
    e[i] = Entity(model='circle', scale = .2, color = color.green, x=-4.2 + i*0.2)

app.run()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:18:03