Unity UGUI

1、Canvas

1. Screen Space - Overlay

这种渲染模式表示 Canvas 下的所有的 UI 控件永远位于屏幕的前面 , 不管有没有相机 , UI元素永远在屏幕最前面 ,主要是2D效果。类似手机膜贴在手机屏幕的最上面,若是屏幕尺寸或屏幕分辨率发生变化,Canvas也会自动和当前屏幕尺寸相适应,这也就很好的解决了屏幕自适应问题。

 2. Screen Space - Camera

这种渲染模式 Canvas 和 摄像机之间有一定的距离 , 可以在摄像机和 Canvas 之间播放一些粒子特效,主要是3D效果。利用这种渲染模式时需要设定一个摄像机并将其绑定到Canvas组件下的Rander Camera处,改变Camera则UI元素的渲染效果也会发生变化。

3. World Space

这种模式下 Canvas 就和普通的 3D 物体一样了 , 可以控制它的大小,旋转,缩放等 。这种渲染模式使得UI元素和3D世界中的物体产生遮挡效果。 一般用来做血条。

plus:

勾选"Pixel Perfect",在Canvas中的模糊效果消失,变得相对清晰。

屏幕分辨率问题:

横屏

竖屏

2、Text

color:颜色

size:大小

b:加粗

i:倾斜

锚点:

  1. Panel

Panel 控件又叫面板,该面板实际上就是一个容器,在其上可放置其他 UI 控件。

当移动该面板时,放在其中的 UI 控件就会跟随移动,这样可以更加合理与方便地移动与处理一组控件。

当面板被创建时,会默认包含一个 Image (Script 组件)。

Source Image 用来设置面板的图像。

Color 用来改变面板的颜色。

  1. Image

Source Image(图像源):纹理格式为Sprite(2D and UI)的图片资源(导入图片后选择Texture Type为Sprite(2D and UI))。

Color(颜色):图片叠加的颜色。

Material(材质):图片叠加的材质。

Raycast Target(射线投射目标):是否作为射线投射目标,关闭之后忽略UGUI的射线检测

Image Type(图片显示类型):

Simple(基本的):图片整张全显示,不裁切,不叠加,根据边框大小会有拉伸。

Preserve Aspect(锁定比例):针对Simple模式,勾选之后,无论图片的外形放大还是缩小,都会一直保持初始的长宽比例。

Image Type(图片显示类型):

 Sliced(切片的):图片切片显示,在Project页面选中图片,切换为Sprite(2D and UI)模式后,点击Sprite Editor进入图片裁切模式,将图片裁切为上图的形状,使用Sliced模式后,根据图片边框拉伸,图片的四个角会保持原状,而1和4部分会随着图片的横向拉伸而拉伸,2和3部分会随着图片的纵向拉伸而拉伸,图片的中间部分会拉伸5进行填充。

Fill Center(填充中心):勾选后,5显示,反之,5不可见。

Image Type(图片显示类型):

 Tiled(平铺的):若图片已经过裁切,则使用Tiled模式后,根据图片边框拉伸,图片的四个角会保持原状,而1和4部分会随着图片的横向拉伸而拉伸,2和3部分会随着图片的纵向拉伸而拉伸,图片的中间部分会用5进行平铺填充。若图片未裁切,则使用Tiled模式后,根据图片边框拉伸,图片保持原大小不做变化,只是用自身平铺填充。

Fill Center(填充中心):(已裁切的图像源才有此选项)勾选后,5显示,反之,5不可见。

Image Type(图片显示类型):

Filled(填充的):根据填充方式、填充起点、填充比例决定图片显示哪一部分。

Fill Method(填充方式):分为水平、垂直、90度圆、180度圆、360度圆。

Fill Origin(填充起点):根据填充方式不同有所变化。

Fill Amount(填充比例):0是完全不显示,1是完全显示。

案例:进度条

    Image img;

    Text txt;

    float timer = 0f;

    void Start()

    {

        img = GetComponent<Image>();

        txt = img.GetComponentInChildren<Text>();

        img.fillAmount = 0;

    }

    void Update()

    {

        timer += Time.deltaTime;

        float per = timer / 10;

        per=per>=1f?1f:per;

        img.fillAmount = per ;

        txt.text = (int)(per * 100) + "%";

    }

  1. RawImage

RawImage和Image的区别:

    Image控件用于显示Sprite类型的图片

    RawImage控件用于显示Texture类型图片

案例:滚动背景

         RawImage raw;

    float speed = 0.1f;

    void Start()

    {

        raw = GetComponent<RawImage>();

    }

    void Update()

    {

        float a = Time.deltaTime*speed;

        Rect r= raw.uvRect;

        r.x += a;

        raw.uvRect = r;

    }

  1. FieldInput

  1. Button

按钮事件操作:

  1. 为注册按钮添加脚本

using UnityEngine.UI;//引用命名空间

public class Reg : MonoBehaviour

{

    public void RegBtn()

    {

        print("注册成功");

   }

}

  1. 为注册按钮添加注册方法

  1. 获取输入框的值

public InputField name;//声明组件(对象)

    public InputField pwd;

    public void RegBtn()

    {

        string name2 = name.text;//获取大输入框的值

        string pwd2 = pwd.text;

        print(name2 + "\t" + pwd2);

        print("注册成功");

}

  1. 提示此姓名已经注册

  1. 操作组件
  1. 获取组件
    1. 把组件声明用public修饰

    public Text biaoTi;//标题文本

    public void Get()

    {

        biaoTi.text = "用户注册";//更改文本内容

}

    1. 通过名称

    Text touXiang;

    void Start()

    {

        //通过名称获取组件

        touXiang =GameObject.Find("touXiang").GetComponent<Text>();

    }

    public void Get()

{

        touXiang.text = "用户头像";

}

  1. 更改图片
    1. Image

public Image wenLong;

public void Get()

    {

        wenLong.sprite = Resources.Load("b",typeof(Sprite)) as Sprite;

}

    1. RawImage

public RawImage jiangTao;

public void Get()

    {

        jiangTao.texture= Resources.Load("a", typeof(Texture)) as Texture;

}

  1. 界面跳转

public GameObject zhuCe;

public GameObject kaiShi;

public void Get()

    {

        zhuCe.SetActive(false);//把注册页面隐藏

        kaiShi.SetActive(true);//把开始页面显示

}

  1. Toggle(开关/切换)

public void GetMan()

    {

        //点击多次还是选择自己

        if (man.isOn)//man是否选中

        {

            woman.isOn = false;

        }

        else if(woman.isOn==false)

        {

            man.isOn = true;

        }

        //woman.interactable = false;//组件是否可用

        //得到选中的文本内容

        Text t = man.GetComponentInChildren<Text>();//得到子组件

        string a = t.text;

        print(a);

    }

    public void GetWoman()

    {

        if (woman.isOn)

        {

             man.isOn = false;

        }

        else if (man.isOn == false)

        {

            woman.isOn = true;

        }

        

        //man.interactable = false;

        //得到选中的文本内容

        Text t = woman.GetComponentInChildren<Text>();

        string a = t.text;

        print(a);

    }

  1. Slider

On Value Changed:值改变时触发消息。

    public Slider slider;

    public void GetValue()

    {

        print(slider.value);

    }

  1. Scrollbar

Handle Rect(操作条矩形):当前值处于最小值与最大值之间比例的显示范围,也就是整个滑条的最大可控制范围。

Direction(方向):滚动条的方向,从左至右,从上至下还是其他的。

Value(值):当前滚动条对应的值。

Size(操作条矩形长度):操作条矩形对应的缩放长度。

Numbers Of Steps(指定可滚动的位置数量):滚动条可滚动的位置数目,为0和1时不生效(事实上只有0个可滚动位置或1个可滚动位置那还叫滚动条吗),例如设为2,则拖动滚动条时滚动条只会处在最小值的位置和最大值的位置,因为他的可滚动位置只有2个,例如设为3,则拖动滚动条时滚动条只会处在最小值的位置、最大值的位置以及中间位置,因为他的可滚动位置只有3个。

On Value Changed:值改变时触发消息。

    public Scrollbar scrollbar;

    public void TuoDongTiao()

    {

        float a = scrollbar.value;

        print(a);

    }

  1. Scroll View

1、创建一个Panel,命名为ScrollRect,添加 ScrollRect组件

正在上传…重新上传取消​

2、在ScrollRect下创建一个子Panel,命名为Grid,添加Grid Layout Group 组件

正在上传…重新上传取消​

3、在Grid下,创建一个Image,按Ctrl+D ,Copy出多个Image

正在上传…重新上传取消​

4、在Scene视图,可以看到Image的排列(注意:排列成了两行)

正在上传…重新上传取消​

5、让Grid下的Image排列成一行;做法:拉伸Grid的长度,让它变长

正在上传…重新上传取消​

6、在Game视图,看到Image已经超出了Scroll Rect

正在上传…重新上传取消​

7、给Scroll Rect添加Mask组件

正在上传…重新上传取消​

8、添加完Mask组件之后,Image就不再超出了,但此时仍然不能Drag它

正在上传…重新上传取消​

9、设置参数

正在上传…重新上传取消​

10、设置完参数之后,就能Drag了

正在上传…重新上传取消​

2.2 添加Scrollbar

11、创建一个Panel,命名HScrollbar,添加 Scrollbar 组件,调整大小

正在上传…重新上传取消​

12、在HScrollbar下 创建一个空的GameObject,命名Stretch ,添加 Rect Transform组件,设置Stretch为All

正在上传…重新上传取消​

  1. 在Stretch 下 创建一个Image,命名 Handler

正在上传…重新上传取消​

14、为HScrollbar设置好Handler参数

正在上传…重新上传取消​

15、同时为Scrollbar设置Horizontal Scrollbar

正在上传…重新上传取消​

三、Scroll View 效果

正在上传…重新上传取消​

13、UGUI布局管理

Unity自带的布局模式分为Horizontal Layout GroupVertical Layout GroupGrid Layout Group,分别为水平布局,垂直布局,网格布局。

  1、水平布局

  新建一个UIMain空对象,添加Horizontal Layout Group组件,为该对象添加一个水平布局管理器。在该组件的作用下,UIMain的子对象将按照一定的要求进行水平排列。

  Padding:布局的边缘填充;

  Spacing:布局内的元素间距;

  ChildAlignment:对齐方式;

ChildForce Expand:自适应宽和高;

  2VerticalLayout Group

  新建一个UIMain空对象,添加Vertical Layout Group组件,为该对象添加一个垂直布局管理器。在该组件的作用下,UIMain的子对象将按照一定的要求进行垂直排列。内部参数和水平的一样,不再重复。

  3Grid Layout Group

  GridLayoutGroup是网格布局管理器,这个组件会自动的将其管理下的UI元素进行网格排列,实现了自动换行的功能,常见于游戏的背包。

  Padding:偏移;

  CellSize:内部元素的大小;

  Spacing:水平间距和垂直间距;

  StartCorner:第一个元素的位置;

  StartAxis:元素的主轴线;

  Horizontal:填满一行用一个新行;

  Vertical:填满一列用一个新列;

  Constraint:指定网格布局的行或者列;

Unity UGUIUnity游戏开发中常用的用户界面实现方法。UGUIUnity自带的用户界面系统,可以通过创建UI元素来构建游戏的界面。在Unity中,UGUI可通过创建Button、Text、Image等UI组件来实现交互和展示。 在UGUI中,通常选择ISO模型进行2D平面开发。通过锁定界面可以防止镜头发生偏移,确保界面的稳定性。 添加Button点击事件的方法如下: 1. 在Hierarchy面板中创建一个空物体GameObject。 2. 在Project面板中创建一个新的C#脚本,命名为OnClickButton,并将该脚本添加到GameObject上。 3. 双击OnClickButton脚本,在打开的脚本编辑器中输入相应的代码。该代码的作用是在点击按钮后输出"You click the button."和若干次"Yes"。 4. 在Click方法中使用print函数输出相关信息,并通过循环打印"Yes"特定次数。 5. 完成脚本的编写后,将脚本保存并返回Unity编辑器界面。 以上是关于Unity UGUI的简要介绍和Button点击事件的添加方法。希望对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [超详细的Unity UGUI教学](https://blog.csdn.net/qq_37701948/article/details/106682377)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值