【unity】一些 unity / GUI 学习记录

OnGUI

创建内置UI类

// 生命周期事件
 void OnGUI()
    {
    
    
        // 创建消息盒子 
        // new Rect(left, top, width, height)  前两个表示位置 后两个表示宽高
        GUI.Box(new Rect(10f, 10f, 50f, 50f), "box");
        // 创建按钮
		GUI.Button(new Rect(10f,70f,50f,25f), "Button");  // 返回布尔值
    }

效果:
在这里插入图片描述

编写点击事件


// 按钮事件
if(GUI.Button(new Rect(10f, 70f, 50f, 25f), "Button"))
{
    
    
    Debug.Log("点击了按钮");
}

效果:

UGUI

创建组件

☞ 创建方式

右键: 在这里插入图片描述

☞ C# 引入

先引入命名空间

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

Text组件

❗Unity2021以后的版本,Text组件被归纳到Legacy里

	// 定义全局变量
    public Text text;
    public Font textFont;

    // Start is called before the first frame update
    void Start()
    {
    
    
        // 获取当前的Text组件
        text = GetComponent<Text>();
        // 更改或返回 Text 中的字体
        text.font = textFont;
        // 控制RichText为真(默认为false
        text.supportRichText = true;
    }

Image组件

☞ 引入自定义图片

先创建image容器

❤ 直接创建

1、新建文件夹Resources,放入自定义图片。
❗Image必须是sprite格式。
2、修改格式
在这里插入图片描述
3、插入自定义图片
在这里插入图片描述
效果:在这里插入图片描述

☞ 属性

❤ source Image:源图像,Sprite图像资源
❤ Color: 颜色与透明度
❤ Material: 材质
❤ Raycast Target: 射线投射目标
❤ lmage Type *

1、 Simple默认,在拉伸区域内完全显示一张图片
2、Sliced切片,九宫格应用,需要图片做过九宫格分割,四角在图片拉伸时不会拉伸变形
(适用有边框图片,可以保证四个角不变形)
九宫格切割:点击Sprite 的 Sprite Editor
在这里插入图片描述

3、Tiled平铺,像铺地板一样填满整个控件
4、Filled填充,技能冷却主要依靠这个属性

	Fill Method: 切割方式,水平、垂直,90、180、360度圆形
	Fill Origin:切割起始位置
	Fill Amount: 切割的量,0~1
	clockwise:顺时针方向
	Preserve Aspect: 保持长宽比
❤ Preserve Aspect: 保持长宽比
❤ Set Native Size: 设置原始尺寸

☞ 技能冷却制作

1、在技能图标上添加白色背景
在这里插入图片描述
2、白色背景设置透明,image type属性配置
在这里插入图片描述
3、导入c#脚本在白色背景层上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;  // 记得 引入ui命名空间

public class ImageTest : MonoBehaviour
{
    
    
    public Image image;
    public float coolDowTime = 5f; // 全局设置技能总冷却时间
    public float restTime = 5f; // 技能剩余时间
    // Start is called before the first frame update
    void Start()
    {
    
    
        // 给image赋值
        image = this.GetComponent<Image>();
        
    }

    // Update is called once per frame
    void Update()
    {
    
    
        if(restTime > 0)
        {
    
    
            restTime -= Time.deltaTime;    // 减去每一帧的时间
            image.fillAmount = restTime / coolDowTime;  // 重新赋值
        }
    }
}

❗如果白色背景层无反应突然从透明变消失可能是image没赋值上
在这里插入图片描述

RawImage组件

可用于实现渐入渐出的动画效果

☞ 属性

❤ Texture: 图片源

与Image不同的是,RawImage可以导入各种格式的图片

❤ UV Rwct

x:向x轴偏移 y:向y轴偏移
W,H:宽高比

❤ 动画渐入
    public RawImage rawImage;
    public float speed = 1f;  
    // Start is called before the first frame update
    void Start()
    {
    
    
        rawImage = GetComponent<RawImage>();
        rawImage.uvRect = new Rect(new Vector2(-1,0),new Vector2(1,1));  // 重新给uvRect赋值 ((x,y), (w,h))
    }

    // Update is called once per frame
    void Update()
    {
    
    
        // Time.deltaTime: 每帧间隔时间
        //rawImage.uvRect = new Rect(new Vector2(rawImage.uvRect.x + speed * Time.deltaTime, 0), new Vector2(1, 1));
        if(rawImage.uvRect.x < 0)
        {
    
    
            rawImage.uvRect = new Rect(new Vector2(rawImage.uvRect.x + speed * Time.deltaTime, 0), new Vector2(1, 1));
        }
        else
        {
    
    
            rawImage.uvRect = new Rect(new Vector2(0, 0), new Vector2(1, 1));
        }
    }
❤ 动画切换
	public RawImage rawImage;
    public float intervalTime = 1f;  // 设置每隔一秒切换一次
    public float timer = 0f;     // 设置计时器
    void Start()
    {
    
    
        rawImage = GetComponent<RawImage>();
        //2、动画切换效果
        rawImage.uvRect = new Rect(new Vector2(0, 0), new Vector2(0.25f, 1));  // 根据图片设置w 
    }

    void Update()
    {
    
    
        //2、动画切换效果
        timer += Time.deltaTime;
        if (timer >= intervalTime)
        {
    
    
            // 大于1时位置重置为0
            if(rawImage.uvRect.x > 0.75f)
            {
    
    
                rawImage.uvRect = new Rect(new Vector2(0, 0), new Vector2(rawImage.uvRect.width, 1));
            }
            rawImage.uvRect = new Rect(new Vector2(rawImage.uvRect.x + 0.25f, 0), new Vector2(rawImage.uvRect.width, 1));
            timer = 0;  // 重置计时器
        }
    }

阴影 / 描边组件

1、阴影组件:在Image或RawImage加上组件Shadow组件
2、描边组件:在Image或RawImage加上组件Outline组件

Button组件

☞ Image:按钮的背景

☞ Button

❤ Interactable:是否交互
❤ Transition:按钮效果

None:无点击效果
Color Tint:颜色交互 在这里插入图片描述
Sprite Swap:图片交互
Animation:动画交互

❤ Navigation:方向键关联按钮
❤ On Click:点击事件
可视化窗口绑定

1、在button下创建脚本

public void clickButton()
    {
    
    
        Debug.Log("button");
    }

2、点加号绑定带有c#脚本的按钮,选中脚本刚写的事件
在这里插入图片描述

C#脚本绑定
	// Start is called before the first frame update
    void Start()
    {
    
    
        // 脚本绑定按钮事件
        this.gameObject.GetComponent<Button>().onClick.AddListener(clickButton);
        // 脚本绑定带参数事件
        string str = "带参数的按钮";
        this.gameObject.GetComponent<Button>().onClick.AddListener(()=>handleClickButton(str));
    }
    // Update is called once per frame
    void Update()
    {
    
    
        
    }
    public void clickButton()
    {
    
    
        Debug.Log("button");
    }
    private void handleClickButton(string str)
    {
    
    
        Debug.Log(str);
    }
效果

在这里插入图片描述

Toggle组件

☞ 属性

❤ ls On :是否选中
❤ Toggle Transition:切换过渡

None 为无切换过渡,Fade 为切换时 Graphic 所指目标渐隐渐显

❤ Graphic:指向Checkmark ,控制Checkmark显示
❤ Group:设置分组

把多个Toggle放在同一个物体下,在这个物体上添加ToggleGroup,并给Toggle赋值,就可以实现单选
1、添加一个空的GameObject,并命名为ToggleGroup
2、ToggleGroup内创建多个Toggle
3、给ToggleGroup添加组件ToggleGroup
4、在每个Toggle上添加ToggleGroup(非组件)
在这里插入图片描述


在这里插入图片描述
ToggleGroup内 勾选则设置允许空白选项


❤ On Value Change:状态改变事件
可视化窗口绑定

视窗绑定参考button

C#脚本绑定
    void Start()
    {
    
    
        // 脚本绑定带参数事件
        this.gameObject.GetComponent<Toggle>().onValueChanged.AddListener((bool val) => handleChangeToggle(val));
    }

    void Update()
    {
    
    
        
    }
    
    // 带参数
    public void handleChangeToggle(bool isOn)
    {
    
    
        Debug.Log(isOn);
    }
效果

在这里插入图片描述

Slider组件

☞ 属性

❤ Fill Rect:用作滑块填充的可选矩形转换
❤ Handle Rect:用于控件滑动“控制柄”部分的图形
❤ Direction:滑动条值增加的方向

Left To Right:左到右在这里插入图片描述

Right To Left:右到左在这里插入图片描述

Bottom To Top:下到上在这里插入图片描述

Top To Bottom:上到下在这里插入图片描述

❤ Min Value、Max Value:最大值、最小值
❤ Whole Numbers:勾选每次值以整数增加
❤ Value:当前值

☞ 控制音量播放

1、在Slider上添加Audio Source组件
在这里插入图片描述
loop:循环播放

2、c#绑定

    void Start()
    {
    
    
        
    }

    void Update()
    {
    
    
        
    }

    public void ChangeSlider()
    {
    
    
        float value = this.gameObject.GetComponent<Slider>().value;
        // Debug.Log(value);
        // 控制音量
        this.gameObject.GetComponent<AudioSource>().volume = value;
    }

☞ 血条控制

写了一堆没保存,有时间再补

Input Field

☞ 属性

Text Component:文本组件
Input Field的文本显示输入组件
Text:lnput Field的初始值。
Character Limit:字符数量限制,最大输入的字符数,0为不限制。
Content Type:内容类型,限定Input Field的输入内容类型,包括数字、密码等,
常用的类型如下:
Standard:标准类型,什么字符都能输入,只要是当前字体支持的。
Autocorrected:自动更正
lnteger Number:整数类型,只能输入整数。
Decimal Number:十进制数,能输入整数或小数。
Alphanumeric:文字和数字,能输入数字和字母。
Name:姓名,能输入英文及其他文字,当输入英文时自动姓名化(首字母大写)。
Password:密码类型,输入的字符隐藏为*
Email Address:邮箱类型
Pin: Pin类型,字符隐藏为*
Custom :自定义

☞ 事件

    // 值改变
    public void ChangeValue()
    {
    
    
        var value = this.gameObject.GetComponent<InputField>().text;
        //Debug.Log(value);

        // 获取当前输入的值(只能获取英文键盘和小键盘
        foreach(KeyCode item in System.Enum.GetValues(typeof(KeyCode)))
        {
    
    
            if (Input.GetKeyDown(item))
            {
    
    
                Debug.Log(item.ToString());
            }
        }
    }
    // 结束编辑(光标移开
    public void EndEdit()
    {
    
    
        var value = this.gameObject.GetComponent<InputField>().text;
        //Debug.Log("结束编辑 " + value);
    }```

猜你喜欢

转载自blog.csdn.net/qq_36687211/article/details/127688482