Roblox GUI部分总结

这篇博客总结了Roblox中的GUI设计,包括位置、形式、属性等关键点。内容涉及通用属性如AnchorPoint和Size,文本和图像属性,按钮、ScrollingFrame的用法,以及渐变效果和自定义加载屏幕的实现。此外,还详细阐述了Events和远程事件在客户端与服务器间的交互应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GUI部分总结

位置

GUI一般放在StarterGui 对象下面,作为 StarterGui 的子项 ScreenGui 的子项。

特殊情况:放在StarterPlayer下面的StarterPlayerScripts里,一般游戏中对摄像机的控制就放在这里。
在这里插入图片描述

注意:必须将该脚本的父级设定为PlayerGui,这样才会在游戏开始后显示出GUI(StarterGui 下的会默认这样做)

ScreenGui.Parent = Player:WaitForChild("PlayerGui")

形式

GUI都一般放在 ScreenGui下面,这就是一个覆盖整个玩家屏幕宽度和高度的空白画布。要想不局限于屏幕的效果,如商店招牌,需要使用SurfaceGui

常用的有
在这里插入图片描述
如果GUI较多,需要使用Frame框架来更方便地控制他们。

Frame本身没有任何内容,作用是控制子级的Size和Position。子级的Size和Position都是相对Frame而言,这样可以实现GUI的分区操控。

属性

通用属性

  • AnchorPoint,锚点

即Position位置所对应的点,默认在GUI的左上角
如果GUI需要放在屏幕偏下面或右面的位置,修改锚点会使GUI更好控制

  • BackgroundColor3,背景色
  • BackgroundTransparency,背景的透明度
  • BorderColor3,边框的颜色
  • BorderSizePixel,边框的像素宽度,不要需可以设置为1
  • Position,位置,是UDim2变量

由X 水平位置和Y 垂直位置来设置。
Scale 是宽度或高度的百分比,用来设置相对长度。
因为在Roblox中,屏幕的尺寸不尽然相同,所以设置比例可以保证元素在大部分时候显示正常。
Offset偏移值,是移动的像素数量,用来设置绝对长度,可以为
在这里插入图片描述

  • Size,大小,和Position设置相似
  • ZIndex,层数,默认是1。数字越高层数越高,显示越靠前

文本属性

TextLabel和TextButton里面使用

  • Font,字体

  • LineHeight,行之间的间距

  • Text,呈现的字符串

  • TextBounds,文本的像素大小

  • TextColor3,文本的颜色

  • TextSize,文本的行高(以像素为单位)

  • TextStrokeColor3,确定文本轮廓的颜色(轮廓线)

  • TextStrokeTransparency,确定文本轮廓的透明度,不需要就设为1

  • TextTransparency,文本的透明度

注意:Roblox里面实现文本的换行比较麻烦,简单的方法是在txt文件中写好再粘贴进来

图像属性

适用于ImageLabel和ImageButton
首先游戏发布至 Roblox ,然后在游戏资源管理器中选择导入,来上传图片。
上传后,在游戏资源管理器中找到图片,右键点击 将ID复制到剪贴板,然后粘贴到Image属性中,这样就有了图片

按钮

一种是TextButton,一种是ImageButton
最简单的操作是通过LocalScript本地脚本来实现的,如实现点击按钮切换图像的效果:
在ImageButton下面新建LocalScript,代码如下

local button = script.Parent
local toggled = false
 
local function onButtonActivated()
	if toggled == false then
		button.Image = "rbxgameasset://Images/ImageButtonActivated"
		toggled = true
	else		
		button.Image = "rbxgameasset://Images/ImageButtonNormal"
		toggled = false
	end
end
 
button.Activated:Connect(onButtonActivated)

ScrollingFrame 滚动条

ScrollingFrame类似于Frame,但会有一个占据一部分Size的滚动条
滚动条本身由三个图像组成:顶部、中间和底部,中间的图形会进行拉伸
默认为垂直滚动条,水平滚动条通过修改CanvasSize来实现(只有X没有Y就是水平滚动条)
在这里插入图片描述

参考:创建滚动框架 GUI.

渐变效果(补间)

用于实现GUI的平缓变化

  • TweenPosition,平稳地将GUI移至endPosition
    各参数(不需要更改的参数可以用nil来代替):

     - UDim2 endPosition,目的地
     	- 格式: (number xScale, number xOffset, number yScale, number yOffset)
     - EasingDirection easingDirection,方向,有三种,默认为1
     	- 缓入0	渐变开始时速度较慢,越接近结束速度越快
     	- 缓出1	渐变开始时速度较快,越接近结束速度越慢
     	- 缓入缓出2	缓入和缓出存在于同一渐变当中,开始时为缓入,从半程起往后缓出生效
     	直观化参见:https://developer.roblox.com/zh-cn/api-reference/enum/EasingDirection
     - EasingStyle easingStyle,风格,有10种,默认为Quad
     	直观化参见:https://developer.roblox.com/zh-cn/api-reference/enum/EasingStyle
     - float time,完成的时间,默认1s
     - bool override,默认false,是否会覆盖正在进行的补间
     - Function callback
    
  • TweenSize ( UDim2 endSize , EasingDirection easingDirection ,
    EasingStyle easingStyle , float time , bool override , Function
    callback ) 平滑地将GUI调整为新的大小

  • TweenSizeAndPosition ( UDim2 endSize , UDim2 endPosition ,
    EasingDirection easingDirection , EasingStyle easingStyle , float
    time , bool override , Function callback ) 将GUI平滑地移动和缩放到新的大小和位置

颜色渐变效果

原理:使用TweenService来实现
ScreenGui 对象上插入一个 Frame,然后建立一个LocalScript:

local TweenService = game:GetService("TweenService")
 
local frame = script.Parent
frame.Position = UDim2.new(0, 20, 0, 20)
frame.BorderSizePixel = 0
frame.Size = UDim2.new(0, 400, 0, 30)
frame.BackgroundColor3 = Color3.fromRGB(0, 255, 75) -- 开始时将背景设置为绿色
 
local newSize = UDim2.new(0, frame.Size.X.Offset*0.5, 0, frame.Size.Y.Offset) -- 目标尺寸
local newColor = Color3.fromRGB(255, 255, 50) -- 目标背景颜色

 -- 使用TweenService的效果
local tweenInfo = TweenInfo.new(1.5, Enum.EasingStyle.Quart, Enum.EasingDirection.Out)
local tween = TweenService:Create(frame, tweenInfo, {Size=newSize, BackgroundColor3=newColor})
 
wait(2)
 
tween:Play() -- 播放渐变

自定义加载屏幕

默认情况下,Roblox 提供加载屏幕,但可以创建自定义加载屏幕以进一步个性化
代码放置在 ReplicatedFirst 的 LocalScript 中:

-- 用图片自定义一开始的加载屏幕
local PlayerGui = game.Players.LocalPlayer:WaitForChild("PlayerGui")
PlayerGui:SetTopbarTransparency(0) -- 隐藏可能在其后面加载的任何几何体

local screen = Instance.new("ScreenGui")
screen.Parent = PlayerGui

local ImageLabel = Instance.new("ImageLabel") -- 使用图片
ImageLabel.Size = UDim2.new(1,0,1,0) 
ImageLabel.Position = UDim2.new(0.5,0,0.5,0)
ImageLabel.AnchorPoint = Vector2.new(0.5,0.5) -- 锚点在中间
ImageLabel.Image = "rbxassetid://4950121356" -- 使用的图片
ImageLabel.Parent = screen

script.Parent:RemoveDefaultLoadingScreen()

ImageLabel:TweenSize(UDim2.new(1.2,0,1.2,0),1,4,10)-- 将图片变为新的大小

local start = tick() -- tick()表示当前时间,单位秒
while tick() - start < 6 do -- 等待6秒
	wait(0.3)
end

screen.Parent = nil -- 销毁

参考:自定义加载屏幕

Events

Activated 事件对于按钮来说最为可靠,默认情况下适用于鼠标、触摸屏等。例子参考上面

其他:
MouseButton1Click ( ),鼠标点击一下来激活
MouseEnter ( int x , int y ),鼠标进入,模拟滑动效果
。。。

远程事件

远程事件旨在提供服务器和客户端之间的单向消息
可从客户端定向到服务器,从服务器定向到特定客户端,或从服务器定向到所有客户端。

RemoteEvent 对象本身必须位于两者均可查看的场景。
建议在ReplicatedStorageTool下面新建RemoteEvent,比较多的话放在一个Events文件夹中

local Events = game.ReplicatedStorage.Events
local EventA = Events.XXXX

GUI的脚本是LocalScript,在客户端实现。

客户端到服务器

通过FireServer函数来触发
客户端:

remoteEvent:FireServer()

服务器:

remoteEvent.OnServerEvent:connect(执行的函数)

服务器到客户端

两种方式:向单个客户端 / 同时向每个客户端 发送消息

  • 向单个客户端发送消息,需要带参数:
remoteEvent:FireClient(Player)

或者

remoteEvent:FireClient(player, Players.MaxPlayers, Players.RespawnTime)
  • 要向所有客户端发送消息,不用传递Player物体:
RemoteEvent:FireAllClients()

要在客户端上监听消息,LocalScript 需将函数连接至 RemoteEvent 的 OnClientEvent事件:

RemoteEvent.OnClientEvent:connect(执行的函数)

客户端到客户端

必须通过服务器中转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值