Скрипт: панель интерфейса с кнопкой

Заготовка интерфейса: панель по центру нижней части экрана, кнопка и надпись. Размеры заданы долями экрана, поэтому вёрстка не разъезжается на узких телефонах.

Куда положить

StarterPlayer → StarterPlayerScripts, тип объекта LocalScript

Что должно быть в проекте

  • Ничего в сцене создавать не нужно — интерфейс собирается кодом

Код

StarterPlayerScripts/HudPanel.client.lua
  1. local Players = game:GetService("Players")
  2. local player = Players.LocalPlayer
  3.  
  4. local gui = Instance.new("ScreenGui")
  5. gui.Name = "Hud"
  6. gui.ResetOnSpawn = false
  7. gui.Parent = player:WaitForChild("PlayerGui")
  8.  
  9. local panel = Instance.new("Frame")
  10. panel.Size = UDim2.fromScale(0.34, 0.16)
  11. panel.Position = UDim2.fromScale(0.5, 0.86)
  12. panel.AnchorPoint = Vector2.new(0.5, 0.5)
  13. panel.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
  14. panel.BackgroundTransparency = 0.05
  15. panel.Parent = gui
  16.  
  17. local corner = Instance.new("UICorner")
  18. corner.CornerRadius = UDim.new(0, 16)
  19. corner.Parent = panel
  20.  
  21. local padding = Instance.new("UIPadding")
  22. padding.PaddingTop = UDim.new(0, 10)
  23. padding.PaddingBottom = UDim.new(0, 10)
  24. padding.PaddingLeft = UDim.new(0, 12)
  25. padding.PaddingRight = UDim.new(0, 12)
  26. padding.Parent = panel
  27.  
  28. local layout = Instance.new("UIListLayout")
  29. layout.Padding = UDim.new(0, 8)
  30. layout.HorizontalAlignment = Enum.HorizontalAlignment.Center
  31. layout.Parent = panel
  32.  
  33. local label = Instance.new("TextLabel")
  34. label.Size = UDim2.fromScale(1, 0.4)
  35. label.BackgroundTransparency = 1
  36. label.TextScaled = true
  37. label.Text = "Собрано: 0"
  38. label.Parent = panel
  39.  
  40. local button = Instance.new("TextButton")
  41. button.Size = UDim2.fromScale(1, 0.5)
  42. button.TextScaled = true
  43. button.Text = "Собрать"
  44. button.Parent = panel
  45.  
  46. local buttonCorner = Instance.new("UICorner")
  47. buttonCorner.CornerRadius = UDim.new(0, 12)
  48. buttonCorner.Parent = button
  49.  
  50. local collected = 0
  51.  
  52. button.Activated:Connect(function()
  53. collected += 1
  54. label.Text = "Собрано: " .. collected
  55. end)

На что обратить внимание

  • Счётчик здесь чисто визуальный: если он должен влиять на игру, считать обязан сервер
  • ResetOnSpawn = false не даёт интерфейсу пересоздаваться после смерти персонажа
  • Кнопка ниже 44 пикселей на телефоне плохо нажимается — держи её долей экрана, а не пикселями