一、手游 UI 的第一课:触屏没有"键盘鼠标"
"PC 游戏有键盘鼠标,手游只有一块屏幕。"老周说,"UI 设计要从'手指'出发——拇指能碰到的地方,才是好操作区。"
手游 UI 布局原则(拇指热区):
左下:虚拟摇杆(移动)—— 左手拇指
右下:技能按钮(普攻/技能/大招)—— 右手拇指
顶部:血条、金币、小地图 —— 看,不用点
中间:尽量留空(别挡视野)
MOBA 的 HUD 布局(云间对决):
┌───────────────────────────┐
│ 血量 │ 金币 │ 时间 │ 小地图 │ ← 顶部信息
├───────────────────────────┤
│ │
│ 游戏世界(视野) │
│ │
├───────────────────────────┤
│ 摇杆 │ 普攻 │ 技能1 技能2 │ ← 底部操作
└───────────────────────────┘
原则:常用操作放拇指热区,信息放视野边缘
"MOBA 的操作手感,一半来自 UI 布局——摇杆位置、按钮大小、间距,都影响'好不好按'。王者荣耀的摇杆和技能键位置,是经过无数轮测试调出来的。"
二、虚拟摇杆:手游移动的标准方案
"移动操作,手游标准答案是虚拟摇杆(Virtual Joystick)。"老周写:
虚拟摇杆实现:
固定摇杆:左半屏任意位置按下,摇杆出现在指尖
动态摇杆:摇杆固定位置,滑动改变方向
原理:
检测手指按下 → 记录起点
手指移动 → 计算偏移向量 → 归一化为移动方向
手指抬起 → 方向归零
Unity 实现(UGUI):
EventTrigger(PointerDown/Move/Up)
一个圆形底 + 一个圆形头
摇杆 → 移动映射(伪代码):
def on_drag(pointer_pos):
delta = pointer_pos - joystick_center
direction = delta.normalized # 方向
magnitude = min(delta.magnitude, radius) / radius # 力度 0~1
hero.SetMoveDirection(direction, magnitude)
手感细节:
死区(Dead Zone):小偏移忽略(防抖)
跟随手指:摇杆中心跟随手指(比固定好按)
方向平滑:不要瞬移,逐步转向
"摇杆是 MOBA 的'方向盘'——'跟随手指 + 死区 + 平滑'这三个细节,决定摇杆好不好用。很多手游的'操作手感差',都是摇杆细节没调好。"
三、技能按钮与按键布局
"技能怎么按?右手四个键:普攻 + 三个技能。"老周说:
技能按钮设计:
┌────┐ ┌────┐ ┌────┐
│普攻 │ │技能1│ │技能2│ │大招│
└────┘ └────┘ └────┘ └────┘
(大、常用) (CD 转圈显示)
细节:
技能图标上显示:冷却倒计时(转圈/数字)
蓝量不够:按钮变灰
技能射程:按下后显示范围指示器(圈)
拖动技能:瞄准方向(方向性技能)
MOBA 技能交互类型:
点按释放:指向当前位置/默认目标
拖拽释放:拖出方向/区域(瞄准)
长按释放:按住蓄力
触觉反馈:
按钮按下:缩放动画(按下去的感觉)
技能成功:图标闪一下 + 音效
代码骨架:
button_skill1.onClick += () => {
if (hero.CanCastSkill(1)) {
hero.CastSkill(1);
PlayButtonPressFeedback();
}
};
"技能按钮的'反馈'是操作感的关键——按下有缩放、冷却有转圈、释放有音效。这些细节让玩家觉得'按得动、有反应'。"
四、血条、伤害飘字、小地图:信息怎么展示
"MOBA 信息多:血量、蓝量、伤害、金币、小地图、击杀播报……怎么组织?"老周说:
信息展示设计:
① 血条(头顶/底部):
颜色变化:绿→黄→红(血量低变红)
平滑过渡:血条不是瞬跳,是"慢慢掉"(补一截虚血)
名字显示:英雄名、玩家 ID
② 伤害飘字:
物理伤害:白色数字
暴击:黄色大字(+ 放大动画)
治疗:绿色数字(向上飘)
法术伤害:紫色数字
位置:伤害发生处,向上飘 + 淡出
③ 小地图(Mini Map):
右上角缩略图
己方英雄:绿点 / 敌方:红点(视野内才显示)
点击小地图:发送信号/快速移动视角
MOBA 的灵魂功能(战术指挥靠它)
④ 击杀播报:
"云间剑客 击败 幽冥法师"
顶部横幅 + 音效(First Blood 等)
信息优先级:
战斗关键信息(血条/技能CD)→ 高频显示
次要信息(金币/经验)→ 常驻但低调
不紧急信息(公告/提示)→ 弹出后消失
"UI 信息设计 = 减法艺术——一屏放太多信息,玩家反而什么都看不见。血条、飘字、小地图、播报,都要'该出现时出现,该消失时消失'。"
五、音效与特效:让打击"有感觉"
"MOBA 的'爽感',一大半来自表现层——特效和音效。"老周说:
音效系统(Audio):
分层管理:
BGM(背景音乐):大厅/对战的音乐,循环播放
SFX(音效):攻击、技能、击杀、升级,短促
UI 音效:按钮点击、确认
关键音效(MOBA 打击感):
普攻命中:短促的"打击声"
技能释放:技能专属音效(大招要有"气势")
暴击:更响、更有力的声音
死亡:角色的阵亡音效
实现:
AudioSource 组件(Unity)
对象池复用(音效频繁播放,不能每次创建)
特效系统(粒子系统 Particle System):
粒子 = 大量小图元组成的动态效果
用途:
技能释放(剑气/火球/冰霜)
攻击命中(爆火花/血花)
英雄死亡(消散/爆裂)
环境(瀑布/雾/脚印)
Unity Particle System:
发射器(位置/速度/生命周期)
外观(颜色渐变/大小变化/贴图)
结束(淡出/销毁)
特效优化:
粒子数量限制(手机扛不住几万个粒子)
特效图集(减少纹理切换)
低配机型降低特效等级
"打击感 = 视觉(特效+飘字+顿帧)+ 听觉(音效)的合成——这是游戏'手感'的秘密。王者荣耀的每一个技能,都配了精心调校的特效和音效,这是'手感'的物理基础。"
六、屏幕震动与顿帧:反馈的"临门一脚"
"最后两个提升手感的细节:屏幕震动(Screen Shake)和顿帧(Hit Stop)。"老周说:
屏幕震动(Screen Shake):
大招释放/击杀时,屏幕轻微震动
幅度:几像素,别晃吐玩家
实现:相机位置加随机偏移,快速衰减
用途:强化"冲击感"
顿帧(Hit Stop / Freeze Frame):
命中瞬间,游戏暂停几帧(50-100ms)
让玩家"看清"打中那一下
实现:游戏时间短暂暂停(Time.timeScale = 0,再恢复)
用途:让攻击"有力量感"(拳拳到肉)
例子(攻击命中流程):
命中 → 顿帧 0.05s → 伤害飘字 → 受击动画 → 音效 → 微震屏
→ 这一连串反馈 = "打击感"
注意:
顿帧不能长(会卡顿感)
震动不能频繁(会晕)
都要可配置(敏感玩家可关)
"震动和顿帧是'反馈的调味料'——用量恰到好处,手感提升一大截;过量就是灾难。游戏设计里这些'细节的平衡',正是拉开专业和业余差距的地方。"
七、章末:老周的第九、十层总结
第九层 + 第十层:UI 交互与表现
├── 触屏设计:拇指热区(摇杆左下、技能右下)
├── 虚拟摇杆:动态跟随 + 死区 + 平滑(方向盘)
├── 技能按钮:CD 转圈 + 蓝量变灰 + 范围指示
├── 信息展示:血条平滑/伤害飘字/小地图/击杀播报
├── 音效:BGM/SFX/UI 三层管理(打击声要有力)
├── 特效:粒子系统(技能/命中/死亡/环境)
├── 打击感:特效+音效+顿帧+震屏的合成
└── 核心:反馈要及时、有层次、可配置
下一章预告:
游戏能玩、好看、好按了——但手机开始发烫了!
帧率从 60 掉到 30,玩家骂"卡死了"!
—— 性能优化:让手机"不烫不卡"。
"小陈,'云间对决'现在能玩、好看、好操作了——摇杆顺滑、技能有打击感、血条飘字专业。"老周说,"但小陈你摸摸手机背面——烫手! 帧率从 60 掉到 30,再掉到 20……下一章,是最考验'工程功底'的一章:性能优化。让游戏在低端手机上也能'不烫不卡'。"