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

Ursina框架Entity渲染优先级问题求助

Ursina框架中2D Entity渲染优先级问题解决方案

问题背景

创建两个同尺寸的2D 'quad' Entity时,渲染层级不稳定,有时一个覆盖另一个,有时顺序相反,无法固定显示层级。

原代码示例:

from ursina import *
app = Ursina()

o = Entity(model='quad', scale_x=0.3, scale_y=0.3, collider="box", color=color.red,position=(-0.45,-1.4))
Re_bianco = Entity(model='quad', scale_x=0.3, scale_y=0.3, collider="box", position=(-0.5,-1.4))
app.run() 

错误尝试分析

直接调整z轴会导致quad变形,且重叠时仍能看到两个图形,原因是Ursina默认使用透视相机(PerspectiveCamera),透视投影下物体大小会随z轴距离变化,z值越大(离相机越远)物体显示越小,同时透视相机的深度排序可能因精度问题导致重叠区域显示异常。

调整后的错误代码示例:

from ursina import *
app = Ursina()

o = Entity(model='quad', scale_x=0.3, scale_y=0.3, collider="box", color=color.red,position=(-0.5,-1.4,0))
Re_bianco = Entity(model='quad', scale_x=0.3, scale_y=0.3, collider="box", position=(-0.5,-1.4,1))
app.run()

正确解决方案

方案1:使用render_priority属性(推荐)

Ursina的Entity内置render_priority参数,数值越大,渲染顺序越靠后(即显示在上方),无需调整z轴或相机,不会导致变形。

示例代码:

from ursina import *
app = Ursina()

# render_priority数值小的先渲染,大的后渲染(覆盖在上方)
o = Entity(model='quad', scale_x=0.3, scale_y=0.3, collider="box", color=color.red, position=(-0.5,-1.4), render_priority=1)
Re_bianco = Entity(model='quad', scale_x=0.3, scale_y=0.3, collider="box", position=(-0.5,-1.4), render_priority=2)

app.run()

此方案中Re_bianco会始终显示在o的上方,层级固定。

方案2:开启正交相机后调整z轴

如果偏好通过z轴控制层级,先开启正交相机(OrthographicCamera),正交投影下物体大小不随z轴变化,仅z轴数值影响渲染层级(z值越小,物体越靠近相机,显示在上方)。

示例代码:

from ursina import *
app = Ursina()

# 开启正交相机,适配2D场景
camera.orthographic = True
camera.fov = 4  # 根据场景需求调整视野范围,避免物体显示异常

# z值0比z值1更靠近相机,所以Re_bianco会覆盖o
o = Entity(model='quad', scale_x=0.3, scale_y=0.3, collider="box", color=color.red, position=(-0.5,-1.4, 1))
Re_bianco = Entity(model='quad', scale_x=0.3, scale_y=0.3, collider="box", position=(-0.5,-1.4, 0))

app.run()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:06:25