Roblox GUI 简介

匿名 (未验证) 提交于 2019-12-03 00:06:01

界面文档

界面入门介绍

界面动画介绍

StarterGui

本类是一个Service,单例,可以通过game:GetService("StarterGui")来获取。

  1. 作为容器。可以放置一些界面在它下面,当玩家进入游戏中的时候,它的子节点都会被复制到玩家的PlayerGui下。
  2. 作为接口。它可以访问CoreGui 可以通过它来对游戏中的一些默认界面进行设置。可以通过SetCore发送提示信息等等

PlayerGui

玩家所能看到的界面都会在PlayerGui下。StarterGui里面的内容都会自动复制到这个下面。所以StarterGui只适合放一下初始界面,不应该放置大量界面。如果Players.CharaterAutoLoads设置成false,则界面也不会自动加载,需要等到Player:LoadCharater调用之后才会加载。

获取方法:game:GetService('Players').LocalPlayer:WaitForChild('PlayerGui')


ScreenGui

主要的界面控件容器。只有当它是PlayerGui的子节点时,才会被展示。也就是说可以把它的父节点修改,即可以不显示它。
IgnoreGuiInset 可以设置忽略系统菜单的位置。不设置的话,整个界面实际上会往下偏移一个系统菜单的位置。


SurfaceGui

实现3D界面,必须是PlayerGui的子节点,以便界面知道谁在操作它。该界面的表现需要附着在一个3D实体上,并可以选择某一个面来展示。


BillboradGui

公告板界面,也是3D界面,与SurfaceGui不同的是,不需要非得放在PlayerGui下面。它也需要一个3D物体来关联。作为一个公告板,它会一直朝向相机。


Frame

这是一个用来组织界面元素的容器。只有背景框、颜色等属性。
它可以设置一种内置的Style:ChatBlue ,ChatGreen, ChatRed 以及RobloxRound可能比较有用(自动圆角)


ScrollingFrame

特性

  • 面板的位置有UDim2属性决定
  • 同样的,面板的Size也是由一个UDim2属性设置。注意,该面板的滚动条可能会消耗掉一部分大小。
  • 如果你需要知道实际能用的面板的大小,可以使用只读属性 ScrollingFrame.AbsoluteWindowSize
  • 如果有滚动条的话,滚动条的厚度由属性ScrollingFrame.ScrollBarThickness来设置
  • ScrollingFrame内部的控件叫做canvas,CanvasSize属性可以决定这个Canvas的大小。如果这个大小超过ScrollingFrame的大小,滚动条就会自动出现。
  • CanvasPosition属性用来觉得滚动条的初始位置。当然,如果滚动条压根没有,这个属性不会起作用。

自定义

滚动条的图片可以自定义,它由上中下三个图片来控制。只需要设置垂直的滚动条图片,水平滚动条的图片由垂直滚动条顺时针旋转90度得到。

这些图片会根据滚动条的宽度来缩放。其实就是个简单拼图,中间部分会根据长度缩放,其他长度不缩放。没有什么好讲的。


TextLabel

基础文本控件,背景和Frame一样,不需要显示背景的话,可以设置BackgroundTransparency属性为1 。可以设置字体啊、颜色啊、对齐啊等等。还可以设置TextScale属性,可以让字体大小自动缩放,默认有个缩放范围,也可以通过 UITextSizeConstraint来指定。

TextBox

文本输入框。PlaceholderText, PlaceholderColor3 可以设置未输入是的提示文本。
MultiLine 勾选才可以输入多行
注意ClearTextOnFocus属性,默认是勾选的,表示获得焦点时清空原来的文本,可能是不需要的。


TextButton

跟TextLabel基本一致,多了鼠标点击事件。就是说普通的TextLabel是没有办法监听鼠标点击事件的。它在鼠标进入移出的时候默认已经有改变背景颜色。


UITextSizeConstraint

挂在各个有文本的控件下,当控件选择了TextScale,则该对象中的最大最小范围将约束它的父节点的文本缩放范围。

Roblox设计了一系列这种约束,排版对象,而并不是把这些属性直接放置到对象身上。类似一种组件化的设计方式。


ImageLabel

基础图像控件。

九宫格的使用

--|----|----|----|--   |    |    |    | --|----A----|----|--   |    |    |    | --|----|----B----|--   |    |    |    | --|----|----|----|-- 如上图所示,将一个图分成九个部分,在内部会形成四个交点,只要知道ab两个交点,就可以知道整个图是如何分割的B 设置图片属性中ScaleTypeSlice,然后会出现SliceCenter属性。里面的X0,Y0,X1,Y1就是上面两点的坐标。  这里也有一个问题:一个切好的图,如果另一个地方需要使用,又需要再设置一遍吗啊?Roblox有没有预设,模板之类的东西呢?

图集的使用

图像属性中有ImageRectOffset和ImageRectSize属性。就是用来实现图集的功能。offset是大图中的小图的偏移位置,RectSize则是小图的大小。不过不幸的是,本身没有现成的功能直接支持Imageset或者其他配置。所以应该是需要稍微自己实现一下图片名到偏移及大小的映射关系。

例如,使用TexturePacker打包图集,以及json文件(选择json格式),然后将json文件稍微处理一下,只保留小图名以及位置大小。然后提供一个函数,就可以通过图片名来范围位置和大小了。


ImageButton

比图片多了按钮相关的功能。可以设置一个HoverImage的属性。
如果使用图集额话,这里会有别的问题,因为ImageRectoffset和ImageRectSize属性只有一个,怎么对应两个图片?当然也可以自己使用脚本来监听事件设置。

注意,以下的各种控制组件,在子控件的大小,数量发生变换的时候,都可能会引起全部重新排版。所以呢,如果是代码控制,应该在最后一步加入控制组件,或者在子控件变换之前,先将该组件给移走,设置完毕之后再移回来。


UIGridLayout

网格布局组件,挂载之后到某控件之后,该控件的所有子控件将按照网格状来布局。子控件将无法独立设置大小和位置。适合用于背包这种界面布局。


UITableLayout

这是个类似表格一样的布局。不同于Grid,它的子控件是可以设置宽高的,但是有条件约束。
它布局的结果是,某一行的多个控件高度是一致的,行之间则不约束
某一列的宽度是一致的,列之间则不约束。
行和列如何构建呢?
比如Frame下有 FrameA FrameB FrameC三个zi2Frame。则默认会构建三行
然后以FrameA的子控件来构建一行中的多列。
行高如何决定? FrameA下所有控件的最大高度,作为该行的高度。
列宽如何决定?比如第一列的宽度,由FrameA B C的三个Frame的第一个控件的宽度最大值来决定。
这个可以用来做自适应大小的排行榜吧。


UIListLayout

列表,可以设置横向和竖向。
不控制子控件的大小,只控制位置。可以设置对齐方式。可以用于制作列表控件,也可以仅用来排版,控制多个子控件的对齐。


UIPageLayout

将子控件变成多个page,可以用来做初始的介绍页。


UIPadding

就控件的四周设置一些空白位置。比如将X部分设置为100,则子控件x坐标设置为0的时候,实际坐标就是100 。可以用来控制界面的边界


UIScale

控制子控件大小的缩放


UISizeConstraint

大小约束,设置最大值和最小值,一般用于界面适配吧


UIAspectRatioConstraint

缩放比例约束。控制宽高比例。应该主要是用于图片缩放控制,以防变形?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!