技能要求:
经验要求:
5-10年经验
工作描述:
项目编号:【185084】
1. 项目目标
开发一个纯技术验证的AR Demo,用于测试在真实GPS坐标点上叠加3D模型并进行基础交互的可行性。该Demo不涉及任何具体业务逻辑,仅作为公司内部的技术储备,后续可能基于此进行二次开发。因此,要求代码结构清晰、注释充分、易于扩展。
2. 核心功能细节
2.1 GPS点位管理
数据来源:从本地配置文件(JSON格式)读取兴趣点(POI)信息,无需联网。配置文件路径固定(如 StreamingAssets/pois.json)。
点位属性:
id:唯一标识(字符串)
name:显示名称(可选)
latitude:纬度(double)
longitude:经度(double)
altitude:海拔(可选,默认0)
modelPath:模型文件路径(相对于 StreamingAssets/Models)
interactionText:点击模型时显示的文本(字符串)
triggerDistance:触发渲染的最大距离(米,默认500米)
动态更新:支持运行时重新加载配置文件(例如通过菜单按钮触发刷新)。
2.2 实时定位与模型渲染
定位方式:使用Unity的 Input.location 获取GPS数据,不依赖Google Play Services或任何第三方地图SDK,确保国内可用。
坐标转换:
将GPS坐标(经纬度)转换为Unity世界坐标(以用户当前位置为原点)。
使用Haversine公式计算两点间距离,结合海拔进行简单修正(可选)。
模型放置于对应位置,默认Y轴高度为0(地面),海拔数据可用于调整Y轴偏移。
渲染控制:
仅渲染距离小于 triggerDistance 的点位,超出范围隐藏模型。
模型大小根据距离动态缩放(线性或对数曲线,可配置),实现近大远小效果。
模型默认面向摄像机(billboard效果),或保持固定旋转(可配置)。
支持多个模型同时渲染,测试场景建议预设5-10个点位。
模型格式:支持FBX/GLB格式,包含简单材质和动画(可选)。我方提供3个示例模型(如立方体、球体、简单人物模型)。
2.3 交互功能
点击检测:通过Unity的射线检测(Physics.Raycast 或 AR Raycast)实现模型点击。
交互反馈:
点击模型后,屏幕下方弹出一个半透明面板,显示该点位预设的 interactionText 文本,持续3秒后自动消失。
同时模型播放一个简单动画(如缩放闪烁一次),若无动画则改变材质颜色0.5秒。
交互过程中禁止重复触发(防抖)。
2.4 用户界面(UI)
主界面:
顶部状态栏:显示GPS状态(正在定位/已定位/失败)、卫星数、当前精度(米)。
底部信息栏:显示附近可见POI数量(小于触发距离的点位数量)。
浮动按钮:刷新GPS(重新获取位置)和重新加载配置文件。
调试界面(可选,通过摇杆或菜单开关):
显示当前位置经纬度。
显示每个可见点位的距离和模型状态。
2.5 性能优化
使用对象池管理模型实例,避免频繁创建销毁。
LOD(可选):当距离较远时,模型可切换为低面片版本或直接隐藏。
限制最大同时渲染模型数量(如最多20个)。
3. 技术栈与平台要求
引擎:Unity 2021.3 LTS 或更高版本(建议使用长期支持版)。
AR框架:AR Foundation 5.0 或以上,同时支持:
iOS:ARKit XR Plugin
Android:ARCore XR Plugin
GPS:Unity 原生 Input.location,无需其他插件。
开发语言:C#,遵循微软官方编码规范。
目标平台:
iOS:支持iPhone SE 2及以上机型,iOS 14+
Android:支持ARCore兼容的设备(Android 10+)
注意:若设备不支持AR,应自动回退到普通相机模式(仅显示UI和距离计算,不渲染AR模型)。
4. 配置文件示例
pois.json 文件内容格式如下:
json
[
{
"id": "poi_001",
"name": "测试点A",
"latitude": 39.9087,
"longitude": 116.3975,
"altitude": 50,
"modelPath": "Models/Cube.fbx",
"interactionText": "你点击了立方体",
"triggerDistance": 500
},
{
"id": "poi_002",
"name": "测试点B",
"latitude": 39.9080,
"longitude": 116.3980,
"altitude": 0,
"modelPath": "Models/Character.glb",
"interactionText": "你好,欢迎来到测试点B",
"triggerDistance": 300
}
]
5. 交付物清单
5.1 Unity 项目源码
完整工程,可直接在Unity Editor中打开运行。
目录结构清晰,例如:
Scripts/:分为 GPS、POIManager、ARPlacement、UI、Utils 等子文件夹。
Prefabs/:存放模型预制体、UI预制体。
StreamingAssets/:存放配置文件和模型文件。
Scenes/:主场景。
关键算法(如坐标转换、距离计算)必须有详细注释。
避免使用第三方付费插件,除非必要且我方知晓。
5.2 可执行程序
Android:一个APK文件,可直接安装运行。
iOS:一个Xcode工程(或.ipa文件,若开发者账号允许),并提供编译指南。
5.3 技术文档
项目架构图(PDF或图片):说明模块划分和数据流向。
配置说明:如何修改POI点、替换模型、调整交互参数。
二次开发指南:
如何添加新的交互类型(如播放声音、打开网页)。
如何替换GPS算法(如改用高德定位)。
常见问题排查。
测试报告:在至少两款真实设备上的测试结果(机型、系统版本、性能表现)。
5.4 演示视频
在室外开阔地带拍摄,展示从打开应用到点击模型的全过程。
视频时长1-2分钟,包含语音解说(可选)。
6. 非功能性要求
代码质量:通过Unity官方代码规范检查,无冗余代码,无硬编码路径。关键函数提供XML注释。
性能指标:
在iPhone 12、小米11等中高端机型上,稳定30FPS,连续运行30分钟无明显发热。
内存占用控制在300MB以内。
模型加载时间不超过2秒(可使用异步加载)。
兼容性:
Android:覆盖华为、小米、OPPO、vivo、三星等主流品牌,Android 10-13。
iOS:覆盖iPhone 11-14系列,iOS 14-16。
支持不同屏幕分辨率的适配(UI使用锚点布局)。
稳定性:
GPS信号弱时给出提示,并保留最后一次有效位置。
配置文件格式错误时应有友好提示,避免崩溃。
7. 验收标准
7.1 功能验收
安装应用后,授权定位和相机权限,能正常启动AR视图。
状态栏显示GPS精度和卫星数,信息实时更新。
在测试地点(我方提供3个已知坐标点),应用能稳定渲染对应模型。
移动位置时,模型大小随距离变化,超出范围自动隐藏。
点击模型,屏幕下方弹出预设文本,同时模型有视觉反馈。
修改配置文件(增加/删除点位),通过刷新按钮生效,无需重启应用。
在不支持AR的设备上,应用自动进入普通模式(仅显示UI)。
7.2 代码验收
我方技术负责人审查代码,确认结构清晰、注释充分、无安全漏洞。
二次开发指南中的步骤可在1小时内由我方技术人员验证成功(例如替换一个模型、修改交互文本)。
8. 合作方式与保密
知识产权:项目所有产出(源码、文档、可执行程序)归我方所有,外包方不得保留副本或用于其他项目。