Unity开发核心
• 1 min read 1 min • 217 words 217 words
Unity Development Core
Unity 知识领域涵盖渲染管线、动画状态机、编辑器工具、网络编程、XR SDK 等。本页汇总个人 Unity 开发中的关键工具、模式与经验。
知识领域概述
Unity 开发涉及多个专业领域:
- 渲染管线:URP/Built-in/自定义管线,Shader Graph,光照与后处理
- 动画系统:Animator Controller,状态机,Timeline,Cinemachine
- 编辑器扩展:Editor Window,Custom Inspector,ScriptableObject 工具链
- 网络编程:Socket、HTTP、MQTT、Photon PUN、Netcode for GameObjects
- XR SDK:Unity XR Interaction Toolkit,OpenXR 插件,AR Foundation
- AI 集成:Unity Sentis 推理引擎,ML-Agents,本地模型部署
- 性能优化:内存分析,Draw Call 合批,Asset Bundle 策略
关键工具与插件
LeanTouch
移动端触摸交互库,支持旋转、缩放、拖拽。
LeanTouchInteraction脚本实现单指旋转、双指缩放、拖拽灵敏度控制- 常见需求:模型围绕世界 Y 轴旋转而非自转
- 事件过滤:结合
EventSystem.IsPointerOverGameObject()避免 UI 穿透
Mesh 变形与减面
- Mesh Deformation:顶点操作实现陶坯捏制效果,通过
Mesh.vertices实时修改 - Polyfew:减面插件,原理为边坍缩(edge collapse)算法,需注意法线重建问题
- 绘制脚本:基于
Texture2D的像素级绘制,Graphics.CopyTexture注意格式匹配与尺寸兼容
UniTask
异步编程替代协程,支持 async/await:
async Task DownloadConfig()
{
var www = UnityWebRequest.Get("http://example.com/config.json");
await www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
Debug.LogError(www.error);
else
ProcessConfig(www.downloadHandler.text);
}
AVPro
视频播放插件,尤其在 WebGL 平台需处理自动播放限制(用户交互触发)。
网络编程模式
Socket 基础
Unity 中的网络编程主要指:
- 多人游戏:客户端/服务器通信,实时对战
- 数据同步:玩家位置、游戏状态同步
- 外部服务接入:REST API、WebSocket、MQTT
常见模式
- TCP/UDP Socket:低延迟通信,需处理粘包、断线重连
- Photon PUN:云服务简化多人联机,
PhotonView+IPunObservable - Netcode for GameObjects:Unity 官方网络框架,适合中小型项目
- MQTT:物联网场景,轻量级发布/订阅模型
示例:XR 中的网络抓取
[RequireComponent(typeof(PhotonView))]
[RequireComponent(typeof(XRGrabInteractable))]
public class NetworkedGrabbing : MonoBehaviourPunCallbacks, IPunObservable
{
private XRGrabInteractable grabInteractable;
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.isWriting)
stream.Send(grabInteractable.isSelected);
else
grabInteractable.isSelected = (bool)stream.ReceiveNext();
}
}
项目结构规范
典型 Unity 项目目录结构:
Assets/
├── Scripts/ # 游戏逻辑脚本
├── Prefabs/ # 预制体
├── Materials/ # 材质球
├── Textures/ # 贴图
├── Animations/ # 动画文件
├── Plugins/ # 第三方插件
├── Editor/ # 编辑器扩展
├── Resources/ # 运行时加载资源
├── StreamingAssets/ # 流式资源
└── Scenes/ # 场景文件
SVN 版本控制时需忽略:
Library/、Temp/、obj/、Build/、Logs/- 配置
.svnignore见 Unity-SVN文件清理
Unity XR Interaction Toolkit 基础
核心组件
- XRBaseInteractor / XRBaseInteractable:交互基础抽象类
- XRGrabInteractable:可抓取物体
- XRDirectInteractor:直接接触交互
- XRController:手柄输入映射
- XRInteractorLineVisual:射线可视化
常用 API
XRGrabInteractable.selectEntered:抓取开始事件XRBaseInteractor.isSelectActive:交互器激活状态XRInteractionManager:全局交互管理器
版本差异
- XRIT 2.x:基础交互框架,支持 VR/AR
- XRIT 11.x:新增手势识别、物体组合交互、改进的 affordance 系统
- 详细数据获取见 XR、VR、AR开发
Unity Sentis AI 集成
Sentis 是 Unity 的本地 AI 推理引擎,支持 ONNX 模型导入。
核心流程
- 模型导入:将 ONNX 模型拖入 Unity 项目
- 运行时推理:通过
Worker执行模型前向传播 - 输入输出:将游戏数据转换为模型张量格式
应用场景
- 实时图像识别(物体检测、手势识别)
- 文本分类与情感分析
- 游戏 AI 决策(如棋类游戏评估)
示例:棋类 AI
void ComputerMove()
{
// 1. 翻转棋盘状态(从电脑视角)
var flippedBoard = FlipBoard(currentBoard);
// 2. 转换为模型输入张量
var inputTensor = new TensorFloat(new TensorShape(1, 8, 8, 12), boardData);
// 3. 执行推理
worker.Schedule(inputTensor);
var outputTensor = worker.PeekOutput() as TensorFloat;
// 4. 解析最佳走法
var bestMove = ParseBestMove(outputTensor);
ApplyMove(bestMove);
}
跨页面参考
- XR、VR、AR开发 — XR/VR/AR 开发详解,OpenXR 运行时,手势识别
- Unity WebGL开发 — Unity WebGL 构建与部署,AVPro 视频播放策略
- UE5开发 — UE5 蓝图与编辑器工具,可对比 Unity 编辑器扩展