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

如何在Ursina中通过if语句调整DirectionalLight的位置与旋转?

方向光切换失效的问题解决

先看你代码里的几个明显问题:

  • 语法错误:第一个DirectionalLight的rotation参数没写完,rotation=(0, 45, 缺少第三个数值和闭合括号,这会直接导致代码运行报错,先补全这个参数(比如改成rotation=(0, 45, 0))。
  • 逻辑错误:在input方法里,你连续执行drlight.enabled = True和drlight.enabled = False,等于没做任何切换,而且完全没操作drlight2的状态,根本达不到切换灯光的目的。
  • 缩进错误:input方法内的代码缩进不规范,Python对缩进要求严格,错误的缩进会导致代码逻辑不执行或者报错。

修正后的代码示例:

灯光初始化部分(补全语法错误):

drlight = DirectionalLight(parent=pivot, y=3, z=-6, shadows=True, rotation=(0, 45, 0))
drlight2 = DirectionalLight(parent=pivot, y=100, z=120, shadows=True, rotation=(45, -45, 45))
drlight.enabled = True
drlight2.enabled = False

输入事件处理部分(修正逻辑和缩进):

def input(self, key):
    if self.hovered:
        if key == 'left mouse down':
            if animloaded:
                # 切换两个灯光的启用状态,实现角度切换
                drlight.enabled = not drlight.enabled
                drlight2.enabled = not drlight2.enabled

或者用更明确的互斥逻辑:

def input(self, key):
    if self.hovered:
        if key == 'left mouse down':
            if animloaded:
                if drlight.enabled:
                    drlight.enabled = False
                    drlight2.enabled = True
                else:
                    drlight.enabled = True
                    drlight2.enabled = False

另外还要确认animloaded变量是否正确定义且触发时为True,self.hovered的状态是否准确,这些也会影响切换逻辑的执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:40:27