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

求助:如何使用Ursina制作游戏主启动界面

Ursina游戏主启动界面实现方案

以下是适配你现有代码的主界面实现代码,包含「开始游戏」按钮和「控制选项」弹窗功能:

核心逻辑

默认隐藏游戏场景所有实体,显示菜单UI;点击「开始游戏」后切换为游戏状态,点击「控制选项」可查看操作说明。

完整修改代码

from ursina import *
from ursina.prefabs.health_bar import HealthBar
from ursina.prefabs.popup import Popup

app = Ursina()

# ---------------------- 主菜单UI ----------------------
# 菜单背景面板
menu_panel = Panel(
    parent=camera.ui,
    color=color.black.tint(0.7),
    scale=(1, 1),
    z=1
)

# 游戏标题
title_text = Text(
    text="我的Ursina游戏",
    parent=camera.ui,
    y=0.3,
    scale=2,
    color=color.white,
    z=0
)

# 开始游戏按钮
def start_game():
    # 隐藏菜单,显示游戏场景
    menu_panel.enabled = False
    title_text.enabled = False
    start_btn.enabled = False
    controls_btn.enabled = False
    # 启用游戏实体
    ground.enabled = True
    player.enabled = True
    health_bar.enabled = True
    house.enabled = True
    tree.enabled = True

start_btn = Button(
    text="开始游戏",
    parent=camera.ui,
    y=0,
    scale=(0.2, 0.1),
    color=color.green.tint(-0.2),
    on_click=start_game,
    z=0
)

# 控制选项按钮
def show_controls():
    Popup(
        title="操作说明",
        content="""
        W/A/S/D:移动
        Shift:加速(速度25)
        Control:恢复正常速度(速度10)
        空格:跳跃
        """,
        buttons=["关闭"]
    )

controls_btn = Button(
    text="控制选项",
    parent=camera.ui,
    y=-0.15,
    scale=(0.2, 0.1),
    color=color.blue.tint(-0.2),
    on_click=show_controls,
    z=0
)

# ---------------------- 游戏场景实体 ----------------------
# 初始隐藏所有游戏实体,等待开始游戏
ground = Entity(
    model="untitled.blend",
    texture="Soul Sand.jpg",
    scale=400,
    collider="mesh",
    enabled=False  # 默认隐藏
)

player = FirstPersonController(
    model="player.blend",
    position=(-6.39844, 148.284, 62.5471),
    jump_height=7,
    jump_duration=0.5,
    speed=10,
    texture="Player Texture.jpg",
    collider="mesh",
    enabled=False  # 默认隐藏
)
camera.z = None

health_bar = HealthBar(
    bar_color=color.lime.tint(-.25),
    roundness=.5,
    value=100,
    enabled=False  # 默认隐藏
)

def input(key):
    if key == "shift":
        player.speed = 25
    elif key == "control":
        player.speed = 10

house = Entity(
    model="House.blend",
    texture="Tree Texture.jpg",
    scale=2,
    collider="mesh",
    position=(0, 146.3, 15),
    enabled=False  # 默认隐藏
)

tree = Entity(
    model="Tree.blend",
    scale=15,
    texture="Tree Texture.jpg",
    collider="mesh",
    position=(15.5488, 140, 55.0674),
    enabled=False  # 默认隐藏
)

app.run()

关键说明

  • 使用Panel作为菜单背景,通过enabled属性控制元素显示/隐藏
  • 利用Ursina内置的Popup组件快速实现控制说明弹窗
  • 所有游戏实体初始设为enabled=False,点击开始按钮后切换为True
  • 按钮的on_click参数绑定对应功能函数,实现交互逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:45:30