C# 语言进阶(十四)Unity UI界面开发 + 网络消息联动

本篇 核心知识点 :Unity UI 素材导入规范、Sprite 图片设置、九宫格切片、锚点 / 对齐 / 适配、UI 基础组件(Image/Text/InputField/Button)、输入框密码模式、场景创建与跳转、Build Settings 场景注册、登录 / 注册 UI 完整搭建、按钮事件绑定、网络消息联动、消息枚举优化、业务逻辑判断、观察者事件解耦

一、UI 素材导入与图片基础设置

1 素材导入操作

  1. 外部图片直接拖拽到 Unity Assets文件夹,自动生成资源文件;

  2. 所有 UI 图片禁止直接拖到 Canvas,需要先创建 UI 组件再赋值图片源,否则会识别为 3D Sprite。

2 图片纹理核心设置(必改)

概念

图片默认纹理类型为Default/Texture,无法用于 UI 渲染,必须修改参数才能赋值给 Image 组件。

操作步骤
  1. 全选所有 UI 图片 Ctrl+A;

  2. 右侧 Inspector 面板修改:Texture Type = Sprite (2D and UI);

  3. 点击 Apply 批量应用修改;

  4. 选中 Image 组件,将资源拖入Source Image属性,勾选Set Native Size还原原图尺寸。

拓展

3D 模型贴图保持 Texture,UI 界面素材统一 Sprite 类型,两类资源分开文件夹管理。

二、UI 锚点与适配系统(核心适配知识点)

1 对齐预设面板

选中 UI 物体,Inspector 上方对齐九宫面板,一键停靠:

居中、左上、右上、左下、右下、左右拉伸、上下拉伸、全屏拉伸;

全屏拉伸:四边距离全部置 0,自动铺满屏幕背景,适配任意分辨率。

2 锚点修改两种方式

  1. 直接输入锚点 XY(0,0 = 左上角;0.5,0.5 = 中心;1,1 = 右下角)

  2. 快捷操作:按住Shift点击对齐面板绿色锚点,快速切换锚点位置。

3 适配实战逻辑

登录弹窗固定右下角:锚点设右下角,左右 / 底部偏移固定,拉伸窗口弹窗位置不变;

全屏背景:选全屏拉伸模式,完美适配手机 / PC 不同分辨率;

九宫格对话框不能直接拉伸原图,会圆角变形,需要切片处理。

三、Sprite 九宫格切片(Nine Slice)

1 问题现象

圆角弹窗、按钮直接放大缩小,四角倒角、边框会拉伸变形,影响界面美观。

2 插件安装(Unity 2022 + 版本)

  1. 顶部菜单 Window → Package Manager;

  2. 包管理器切换Unity Registry;

  3. 搜索2D Sprite,点击 Install 安装官方 2D 编辑插件。

3 切片完整流程

  1. 选中弹窗背景图片,点击 Inspector「Edit Sprite」打开切片编辑器;

  2. 四条分割线:上下左右各拉一条,隔离四个角落;

  3. 规则:四个角(1/3/7/9 区块)固定不变,上下中间横向拉伸、左右中间纵向拉伸、中心双向拉伸;

  4. 编辑完成点 Apply 保存;

  5. Image 组件Image Type改为Sliced(切片模式),放大后四角不变形。

4 Image 其他填充模式拓展

  1. Simple:原图等比缩放(变形);

  2. Tiled:平铺重复(血条背景、地砖);

  3. Filled:填充模式,通过Fill Amount 0~1实现进度条、技能冷却环形遮罩。

四、Unity 常用 UI 组件详解

1 Image 图像组件

作用:显示 UI 图片、弹窗、按钮背景;

核心属性:Source Image(贴图)、Image Type(切片 / 填充)、Color 调色、Set Native Size。

2 Text 文本组件

  1. 废弃老式 TextMeshPro 不推荐,使用内置 Text;

  2. 可调参数:字体大小、颜色、对齐(左 / 中 / 右)、行高;

  3. 业务规范:账号、标题文字字号 40~50,提示小字 30。

3 InputField 输入框(登录核心组件)

组成结构(双层文本)
  1. Placeholder 占位文本:无输入时灰色提示文字(请输入账号);

  2. Text 输入文本:玩家实际输入内容;

关键属性:ContentType

Standard:普通文字;

Password:密码模式,输入内容自动替换为圆点隐藏,底层字符串仍保存原始密码;

代码获取输入内容

4 Button 按钮组件

  1. 组成:Background Image 背景图 + Text 文字;

  2. 绑定点击事件两种方式:

    可视化拖拽:OnClick 面板添加绑定函数;

    代码动态绑定:btn.onClick.AddListener(ClickFunc);

组件层级规范

Canvas → 登录面板 Image → 账号 Text + 输入框、密码 Text + 输入框、登录 / 注册 / 找回按钮,父子层级清晰。

五、登录 UI 完整搭建流程

  1. 创建 Canvas,分辨率推荐手游1334×750;

  2. 拖入弹窗背景 Image,切片处理、锚点固定右下角;

  3. 添加账号、密码 Text 文本;

  4. 两个 InputField 输入框(账号标准、密码设 Password 模式);

  5. 复制生成登录、注册、找回密码三个 Button,替换背景图;

  6. 调整所有控件锚点适配窗口,层级父子整理。

六、场景创建与场景跳转

1 新建场景

右键 Project 面板 → Create → Scene;

本次项目两个场景:Login 登录场景、Lobby 大厅场景。

2 场景注册(必做,否则跳转报错)

  1. 顶部菜单 File → Build Settings;

  2. 将所有场景拖拽到「Scenes In Build」列表;

  3. 场景索引:列表从上到下对应数字 0、1,代码可通过名称 / 索引跳转。

3 场景跳转代码

命名空间using UnityEngine.SceneManagement;

4 常见报错

报错Scene could not be loaded:场景未添加到 Build Settings 列表。

七、UI 与网络消息联动业务逻辑

1 按钮点击校验逻辑(登录按钮)

点击登录执行流程:

  1. 获取输入框账号、密码文本;

  2. 判断字符串长度,空字符串弹窗提示;

  3. 账号密码非空,构造C2SLogin消息发送服务端;

易错坑:逻辑运算符错误

2 消息命令枚举优化(替代纯数字 1001/1002)

概念

硬编码数字可读性差、易写错,使用枚举统一管理所有子命令,两端同步。

发送消息时直接传入枚举,强类型编译报错,杜绝数字写错问题。

3 注册消息拓展开发

  1. 新增消息类C2SRegister,扩展昵称 Nickname 字段;

  2. 子命令1003客户端发,回执1004服务返回;

  3. 注册逻辑:账号重复返回失败码,成功直接自动登录跳转大厅。

八、主线程消息处理(Unity 线程限制)

核心规则

异步网络子线程禁止操作 UI、场景、GameObject ,所有界面逻辑必须放到Update主线执行。

标准实现方案

  1. 网络 Session 收到消息,加锁存入私有消息队列;

  2. Update 每帧循环读取队列,批量处理消息;

  3. 收到登录成功回执(Result=0),执行场景跳转;失败弹窗提示。

事件 / 观察者解耦方案

  1. 定义全局委托public event Action OnLoginSuccess;

  2. UI 脚本监听该事件;

  3. 主线处理完登录消息后触发委托,自动执行跳转逻辑;

委托与 event 区别

普通 Action:外部可直接= null清空所有监听,不安全;

event 事件:外部仅能+=/-=订阅,禁止直接赋值,游戏项目优先 event。

九、网络库 DLL 项目配置规范

  1. 公共 MyNet 类库输出路径设置Unity/Assets/Plugins;

  2. 每次重新生成 DLL 自动同步,无需手动复制;

  3. 客户端、服务端共用同一套 Packet/Message 代码,消息结构完全统一,避免收发解析错位。

十、常见 Bug 与排错方案

1 UI 图片拖不进 Image Source:图片 Texture Type 未改为 Sprite;

2 弹窗拉伸圆角变形:未做九宫格切片,Image Type 不是 Sliced;

3 场景跳转提示加载失败:场景未加入 Build Settings;

4 输入空账号依然发消息:逻辑运算符 || 写成 &&;

5 子线程操作 UI 报错:消息未中转主线 Update 队列;

6 消息解析字段丢失:未按顺序序列化 / 反序列化子类新增字段;

7 DLL 找不到:类库输出路径未指向 Unity 资源文件夹。

十一、拓展

1 Sprite 图片纹理类型、九宫格切片使用场景;

2 锚点与分辨率适配原理,手游 UI 适配标准;

3 InputField 密码模式底层存储规则;

4 Unity 主线程限制、消息队列中转解决方案;

5 场景跳转配置步骤,Build Settings 作用;

6 event 事件相比普通委托的安全优势;

7 消息枚举优化项目规范,杜绝魔法数字;

8 DLL 公共库两端复用项目分层设计思路。

相关推荐
网络小江7 分钟前
组网第27课:ARP 的能与不能——免费 ARP、代理 ARP 与 ARP 欺骗
服务器·网络·网络安全·负载均衡·免费arp
云计算练习生15 分钟前
什么是文件权限?Linux 中 rwx 与数字权限的对应关系
linux·运维·服务器·操作系统·文件权限管理
FY@-@26 分钟前
VMware ESXi 7.0 实验全记录:嵌套安装 → 网络配置 → 存储 → Windows 10 虚拟机部署
运维·网络·windows·云计算
凯瑟琳.奥古斯特29 分钟前
动态调优IoU提升OCR文本合并精度
开发语言·python·算法
陌陌龙30 分钟前
【紧急预警!PHP 核弹级漏洞 php2shell】
开发语言·php
ynchyong32 分钟前
IPv4 时代的地址冲突检测
网络·ipv4·冲突检测·免费arp·无敌apr·announcemnet
饿了吃洗衣凝珠35 分钟前
red hat day2
linux·运维·服务器
白露与泡影40 分钟前
一线 Java 后端面试八股(2026 更新版,含完整答案)
java·开发语言·面试
企业解惑小能手-域智盾系统43 分钟前
内网监控软件策略不生效、日志缺失?一套从现象到根因的排查框架
开发语言·php·域智盾
ONLYOFFICE43 分钟前
ONLYOFFICE 10.0:深入了解最新的 40 项安全修复
网络·安全