GDPU unity游戏开发 UI界面

初试一下unity中的几个ui界面。

GUI

完成猜拳游戏(图标见附件)。然后注意到PK的图标是靠上的,修改代码使得PK图标垂直居中,如附件截图所示。

提示: 

GUI.Box() 是 Unity 中用于绘制矩形框的函数,通常用于在屏幕上显示简单的装饰性框。

GUI.DrawTexture 函数是 Unity 中用于绘制纹理(Texture)的函数,通常用于在屏幕上绘制2D图像。

素材图

using UnityEngine;
public class GuessingGame : MonoBehaviour{
    public Texture2D[] t_Array;
    public int user=0,computer=0;//分别代表玩家和电脑当前选择的手势。
    public Texture2D pk;//存放纹理图
    private float imageOffsetX = 10; // X 方向偏移量
    private float imageOffsetY = 10; // Y 方向偏移量
    public Rect rect=new Rect(0, 0, 450, 350);//默认坐标(),宽高分别为450,350
    void OnGUI(){
        rect=GUI.Window(0,rect,GuessWindow, "猜拳游戏");//创建一个窗口,GUI.Window(id,窗口的位置大小,方法,标题)
    }
    void GuessWindow(int windowID){
       //指定位置绘制框与标签
       GUI.Box(new Rect(30, 30, 120, 120), t_Array[computer]);
       GUI.Label(new Rect(60,150,60,30),"电脑");
        //GUI.Box(new Rect(160, 30, 120, 120), pk);//这里图放进去是不对齐的
        Rect boxRect = new Rect(160, 30, 120, 120);
        GUI.Box(boxRect, ""); // 绘制一个空的 GUI.Box,用于显示纹理图像
        Rect imageRect = new Rect(boxRect.x+5, boxRect.y + 30, 110, 60);// 计算纹理图像的显示位置
        GUI.DrawTexture(imageRect, pk);// 绘制纹理图像
          /*    GUI.BeginGroup(boxRect);// 在矩形框内创建一个组,并设置相对坐标
                // 定义要在矩形框内显示的内容的位置
                Rect contentRect = new Rect(0, 0, 120, 80);    //对框的偏移       
                GUI.DrawTexture(contentRect, pk, ScaleMode.ScaleToFit, true, 1.0f);// 显示内容
                GUI.EndGroup();              // 结束组*/
        GUI.Box(new Rect(290, 30, 120, 120), t_Array[user]);
       GUI.Label(new Rect(300,150,60,30),"玩家");
       GUI.Label(new Rect(160,180,150,30),"请选择石头剪刀布");
       if (GUI.Button(new Rect(30, 210, 120, 120), t_Array[0])){
            user = 0; Play();
        }//选到石头,调用play方法
       if (GUI.Button(new Rect(160, 210, 120, 120), t_Array[1])){
            user = 1; Play();
        }//选到剪刀,调用play方法
        if (GUI.Button(new Rect(290, 210, 120, 120), t_Array[2])){
            user = 2; Play();
        }//选到布,调用play方法
        GUI.DragWindow(new Rect(0, 0, 10000, 10000));//允许窗口在屏幕上拖动,参数指定了可以拖动的范围
    }
    void Play(){//判断输赢的方法
        computer = Random.Range(0, 3);//电脑随机出
       if (user - computer == 1 || user - computer == -2)
            Debug.Log("你输了!");
       if (user - computer == 0)
            Debug.Log("平局!");
       if (user - computer == -1 || user - computer == 2)
            Debug.Log("你赢了!");
    }
}

在GUI中通过编写代码挂载在一个空物体上就可以运行界面了。代码中说明这个游戏窗口是可以拖动的,其中多次运用了Rect(x偏移, y偏移, width, height),再用 GUI.DrawTexture()调整pk图的位置即可。

UGUI 

实现课本中颜色版的例子。

先创建以下控件。

 

然后你会发现创建了一堆东西叠在那里的,别慌,可以拖哦。点击选中物体,如果误选,也可点击以上面板中的物体组件进行拖拽布局。

 

大概是这样,也可以在plane中加图,按钮文本框哪些文字部分在hierarchy面板中展开控件选label看到inspector面板中的text属性修改,然后把写好的代码挂载在canvas画布上。

using UnityEngine;
using UnityEngine.UI;
    public class UGUI_Color : MonoBehaviour
    {
        public Image ugui_image;
        public Text ugui_text;
        public Slider[] sliders;
        public Toggle toggle;
        public bool is_UpdateImage;
        public float r, g, b;

        void Start()
        {
          r = g = b = 0;//初始化界面颜色
          UpdateInfo();
    }
        void Update()
        {  
          if (is_UpdateImage)// 根据is_UpdateImage的状态更新界面元素的颜色信息
            UpdateInfo();
        }
        private void UpdateInfo()
        {
            ugui_image.color = new Color(r, g, b);
            ugui_text.text = "Color:(" + r.ToString("f2") + "," +
                             g.ToString("f2") + "," + b.ToString("f2") + ")";
        // ugui_text.text = $"Color:({r:f2}, {g:f2}, {b:f2})";
        }
        public void Button_Reset()
        {
            ResetColors();
            foreach (Slider slider in sliders)
            {
                slider.value = 1f;
            }
            toggle.isOn = false;//关闭toggle
        }
        private void ResetColors()//重置
        {
            r = g = b = 1.0f;
            UpdateInfo();
        }
        public void Slider_SetColorR(Slider slider)
        {
            r = slider.value;
        }
        public void Slider_SetColorG(Slider slider)
        {
            g = slider.value;
        }
        public void Slider_SetColorB(Slider slider)
        {
            b = slider.value;
        }
    //更新是否更新图片颜色,所以is_UpdateImage要打勾
    public void Toggle_UpdateColor(Toggle toggle)
        {
            is_UpdateImage = toggle.isOn;
        }
        public void InputField_SetColor(InputField inputField)
        {
            switch (inputField.text.ToLower())//根据输入颜色设置图片颜色,统一大小写
            {
                case "red":
                    ugui_image.color = Color.red;
                    break;
                case "green":
                    ugui_image.color = Color.green;
                    break;
                case "blue":
                    ugui_image.color = Color.blue;
                    break;
            }
        }
    }

接着,对ui控件进行设置。先是canvas画布,拖几个ui控件到相应的框。

 

然后是toggle、sliderR、sliderG、sliderB、button、inputfield,在inspector面板中往下滑,你会看到类似的onchange组件,改一下几个框,拖动组件进去。

大致的布局就弄好了,点击运行查看效果,在game面板中拖滑动条可以看到色块改变颜色。取消勾选toggle,在文本框输入red等字段按回车,也可以看到效果。

这就是一个简单的UGUI界面,UGUI目前在unity界面设计中还是很重要的,需要更多的练习。

UI Toolkit

通过搜索和网上教程了解Unity的UI toolkit,简单阐述UI toolkit的优缺点,并通过UI toolkit实现一个简单的UI界面。

UI Toolkit是一种新的页面设计方式,个人觉得跟一些网页编辑器很像。这里也是低代码的,支持可视化界面编辑,可以写代码,也可以直接在界面添加删除。不过在处理大量元素动画的时候,怎么处理其复杂度与兼容性也是待考虑的。个人用uxml代码做了个比较简单的界面。

<?xml version="1.0" encoding="utf-8"?>
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
    <ui:VisualElement name="Background" style="flex-grow: 1; background-color: #ff0084;">
        <ui:VisualElement name="MyContainer" style="width: 300px; height: 250px; background-color: #C779D0; align-items: center; justify-content: center; margin-left: 20px; margin-right: 20px; margin-top: 20px; margin-bottom: 20px;">
            <ui:Label text="tookit&#10;homework" display-tooltip-when-elided="true" name="NameLab" style="font-size: 50px; -unity-text-align: middle-center; margin-top: 10px; margin-bottom: 10px; margin-left: 10px; margin-right: 10px; padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 0;" />
            <ui:Button text="请点击" display-tooltip-when-elided="true" name="ActionBtn" style="font-size: 50px; margin-left: 10px; margin-right: 10px; margin-top: 10px; margin-bottom: 10px; background-color:#ff6b6b; justify-content: center; align-items: center;" />
        </ui:VisualElement>
    </ui:VisualElement>
</ui:UXML>

在hierarchy面板与assets面板都创建一个uitookit的对象,注意两个是不一样的,双击assets的uitookit的对象即xml文件就可以进去UI builder进行编辑。

要是朝着低代码的趋势下,这些还是要了解的,网页端也如此。

实验心得 

在实际开发中,界面布局也是开发人员做的,有很多程序员都是兼管前端后台,全栈是不是很吃香呢。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值