Cesium For Unity 最新实践流程2 - 20221208

目录

Cesium For Unity 最新实践流程2 - 20221208

1、项目初始化

2、添加数据

3、添加自己的本地或在线三维数据

4、打包

5、运行


上一篇 Cesium For Unity3d 最新实践流程-2022-12-01 讲了如何使用 Cesium For Untiy 发布的项目进行,本篇将讲述如何通过新建项目,加载在线、本地等三维数据的流程。

1、项目初始化

1、新建项目

点击新项目,选择 3D(URP)模板。也可以选择 3D(HDRP)模板,需要注意的是,Cesium for Unity 支持 Universal Render Pipeline(URP) 和 High Definition Render Pipeline(HDRP) 两种渲染管线,但并不支持 Built-in 渲染管线。如果选择空的三维项目作为模板,Cesium 将无法正确渲染要加载的数据集。

d94164f02d044841968dc8f17823ee5d.png

2、未下载该模板的需要先下载,然后点击创建项目即可。

b00ad43b45ad47839c8cf4e777e85234.png

c6e08f776f2a4d9390de52cd0790b642.png

15ecfeb1086540f189f1605e3545243a.png

2d7d5858b14845c8b8ed549936703533.png

f2e8c200cad14db38491e11ae9118a72.png

2、项目设置

创建完成后,项目正常打开如下:

1187772dc8554408bacb34d1e8425a17.png

1、Edit/Project Settings/Package Manager

打开 Edit/Project Settings

ae86865ca42244449000ef24ba11c31d.png

在 Package Manager 中设置如下:

Name: Cesium
​
URL: https://unity.pkg.cesium.com
​
Scope(s): com.cesium.unity

0d444e38c5d34d46be69ebc6cdaa5e8a.png

2、Window/Package Manager

选择 Window/Package Manger

fb569138c3a244ca8d7e77f5d48e85f2.png

点击 Packages,选择 My Registries

f494661abbc8472494d227a2f4c02395.png

选中 Cesium for Unity,点击 install

bad04c64f7b248899db37f838f81a62f.png

安装完成后,会弹出一个窗口,如下,弹出此窗口的原因是 Cesium for Unity 依赖于 TextMeshPro 包中的资源,默认情况下 Unity 项目中不包含该包。因此需要点击 Import TextMeshPro Essential Resources,来导入依赖的资源。

80e1e3dcfe0a4c4b97b6397a1c6c7377.png

导入资源时,确保 Fonts、Resources、Shaders、Sprites 全部被勾选。

90f838620c97458da00929695bd84a52.png

如果意外关闭此窗口,还可以通过 Windows/TextMeshPro/Import TMP Essential Resources 来打开。

f1de0d754ce840839ebb0f83d9776e60.png

安装完成后,可以通过 Project/Assets/TextMesh Pro 位置查看勾选的是否已经安装:

a61ec3fe20b84b5ca88a8a0e98ae652b.png

3、登录 Cesium icon

1、点击 Cesium/Cesium,点击 Connect Cesium ion ,获取 Token

54e12c7b6e7f4c4b899b7582d35acaa0.png

783c7d8a43ca44f48508caa0e3a04baf.png

登录 Cesium ion 账户,没有账户的需要先注册账户。点击后会打开一个网页用于登录,登录成功后,会提示 Cesium for Unity is requesting the following permissions,点击 Allow 即可。

5a86339963b2414fa44f02612152d658.png

点击 Allow 之后,网页会提示 Successfully,然后回到 Unity 桌面项目即可。

23689e6056f94cf99c448dddf2da6822.png

可以看到,登录之后,Unity 桌面项目下已经有了 Cesium 的资产:

93c20d1cc34b4354983e431ac4e98688.png

由于 Cesium 的每个资产都需要 Token,因此需要创建 Token。

点击 Token,选择 Create a new token,可以修改 Name,然后点击 Create New Project Default Token,这将为 Cesium 的所有资产创建 Token,以供使用。

f7ea687f6707430c895f015977899788.png

创建好的 Token 将存在于当前 Cesium ion 账户中,如果已经之前已经有过 Token,可以选择 Use an existing token.

4822b8f4691e4f229fc22c96f164b017.png

4、确认项目场景中是否存在 Main Camera 和 a Directional Light

466ca995e7f644028dcba0ba194b1016.png

5df59a0a9dd44275829c5566ed8df298.png  

如果场景中不存在 Main Camera、Direction Light,可以在 GameObject > CameraGameObject > Light > Directional Light

中分别点击添加即可。

2、添加数据

1、添加地形、影像、建筑模型

点击 Add,在 Cesium ion Assets 下选择 CesiumWorld Terrain,点击右侧的 Add to Level。

737face3e1a84d97945c36709e1672db.png

可以看到,三维地形数据已经加载到场景中:

b3f2639c1f9d4beeac05b189b9d8d101.png

添加 Bing Maps 影像:

7976a659261a45c991be97990aa62be4.png

添加 Cesium OSM Buildings:

6ddeb6aaaa6c4befbb6ac513220dba36.png

添加之后,可以看到 Hierarchy 下 有 CesiumGeoreference,其下方有添加后的地形图层和建筑图层。

dbc1b342bf6e4676843e6f2c1eac235e.png

关闭项目后,重新打开,可能会遇到地形资产访问权限问题,如下,地形不显示,可以点击 throize the project's default token to access this asset,也可以重新登录 Cesium ion,申请 Token。

ea76698f48534695aad3a073dd6cbc91.png

2、配置主摄像头

在 Unity 中,地平线上的地形在移动摄像机时会被切断,在 Game 选项卡查看场景时,剪切甚至更糟。

d1d5014eb3eb44c0aff90d27db1cbced.png

为了解决这个问题,可以设置主相机的裁剪平面的值。

近平面是对象开始出现的相机的最小距离。如果此值较大,则不会显示靠近相机的对象。

远平面是物体将出现的与相机的最大距离。任何比远平面更远的东西都不会出现。

而近、远裁剪平面的值需要根据所使用的的数据、场景相应确定。如果计划显示远处的数据,则可以将仅平面设置为较大的值。尽量不要让远平面离近平面太远,否则可能会遇到渲染问题。

此处将近平面设置为1,远平面设置为 1000000.

并取消勾选 Dynamic Clipping,Dynamic Clipping(动态裁剪),可根据场景中的可见内容自动调整摄像机的近裁剪平面和远裁剪平面的值。勾选之后,就无法手动调整近裁剪平面和远裁剪平面的值了。动态裁剪并总是精确的,仍然可能发生裁切。

79b06c159cea41f8b9ab98633731d2e3.png

1925840e5eec4bc98e679c0b73934a3d.png

3、设置场景默认坐标

点击 CesiumGeoreference,设置 Origin(Longitude Latitude Height),设置后场景会自动跳转到设置位置。

e8717d8647ee4bb8af1fb009520e30ff.png

如下,调整为上海位置。

8730cdf5c3a7428b8cf751a876138f78.png

3、添加自己的本地或在线三维数据

1、选择点击添加 Blank 3D Tiles

a91818a61e52449082a09305b084167e.png

2、添加后将在 CesiumGeoreference 下出现一个名为 Cesium3DTileset 的图层。

cd89056eef6b4ced8495e543382ad3e7.png

3、点击 Cesium3DTileset 图层进行设置

可以修改名称,如下修改为 Cesium3DTilesetTian,然后修改 Source 下的 Tileset Source 选择 From Url,可供下载 3DTile 数据地址:https://cesiumjs.s3.amazonaws.com/downloads/unreal-learning-content/Tileset.zip

c8599c6032d2436bacab6b36ed977bf1.png

4、设置三维数据地址,此地址可以设置在线地址也可以是本机数据地址

此处设置的为本机数据,需要注意的是 URL 地址中 \ 需要替换为 /,如 E:\5UEAndUnityAnd3D\Tileset\tileset.json 替换为 E:/5UEAndUnityAnd3D/Tileset/tileset.json,而且地址中 不允许存在空格,空格需要剔除。

059b490e3ca245c592ad7069c5adb24b.png

5、双击图层定位到

双击 Cesium3DTilesetTian 之后,可以看到数据已经加载,但场景异常如下:

30c4df749c3d4eb9ad8f107de62054e7.png

6、点击 CesumGeoreference,然后点击右侧的 Place Origin Here

6471e18ab40d446c85e34b051ceea73c.png

7、再次双击 Cesium3DTilesetTian,可以看到模型加载正常,地形、影像显示正常。

583be560177e4d1eb4fcc5dceb06ecc7.png

8、但此时模型数据部分是被埋在地下的,此时可以设置当前图层的 Transform/Position 的 Y 值为 74

可以看到修改后,模型数据集已经在地上了。

0f6dec9f5dd54c38b6a8e3d412c9bf0e.png

同理,可以从任何服务器或本地加载 3DTile 数据、地形数据、影像数据,要完全脱机加载资产可以考虑设置 a 来提供数据。可以填充以 .localhost 结尾的URL 字段,如:http://localhost:portNumber/path/to/asset ,如果需要加载 WMS 服务数据,URL应指向资产的主文件,(例如 tilemapresource.xml):http://localhost:portNumber/imageryAsset/tilemapresource.xml

4、打包

选择 File/Building Settings,Platform 选择 Windows,点击 Build And Run,执行构建打包。

4cd4dc032d3846aa8ce8b5dbb466589a.png

5、运行

运行打包后的程序,效果如下:

若运行后,无法显示地形、地图等,请登录 Cesium ion 后,重新打开尝试。

当前打包后的程序,暂无鼠标、键盘事件,场景暂无法缩放、移动等。

686063078997408086cbd936c2958d47.png

<think>好的,用户正在寻找在Unity3D中开发基于WGS84参考系的GIS三维地球功能的插件或解决方案,以及相关的教程。首先,我需要确定哪些插件支持WGS84坐标系,因为很多GIS插件可能使用局部坐标系,需要进行坐标转换。Unity3D本身的地理处理能力有限,所以必须依赖第三方插件。 首先想到的是Cesium for Unity,它支持WGS84,并且能够流式加载真实世界的地形和影像数据。这个插件应该是一个主要的推荐点。另外,Mapbox SDK也是一个可能性,但需要确认它是否直接支持WGS84。ArcGIS Maps SDK for Unity可能也是一个选项,毕竟Esri的产品通常支持标准坐标系。 然后,用户可能需要了解如何将WGS84坐标转换为Unity的局部坐标系,因为Unity使用的是左手坐标系,而WGS84是经纬度高程。这一步转换是关键,否则无法正确渲染位置。需要解释转换的数学方法,比如将地理坐标转换为ECEF(地心地固坐标系),再转换为Unity的局部坐标系,或者使用局部切线平面投影。 接下来是开发教程方面。Cesium和ArcGIS应该都有官方文档和示例项目,可以引导用户参考。另外,Unity Asset Store中的插件通常会有教程资源,比如视频或PDF指南。可能还需要提到一些社区资源,比如GitHub上的开源项目或论坛讨论,帮助用户解决实际问题。 还需要注意性能优化,尤其是处理大规模地理数据时,流式加载和LOD(细节层次)技术很重要。可能涉及地形切片、纹理压缩等方法。此外,坐标精度问题,Unity在处理大坐标时会有浮点精度问题,需要采用相对坐标或双精度数学库来缓解。 最后,用户可能需要了解如何集成其他GIS功能,比如反向地理编码、路径规划等,这时候可以提到geo-golang库,但需要确认是否支持C#或Unity。不过主要解决方案还是在Unity插件本身,可能通过REST API调用外部服务。 总结推荐的步骤:选择合适插件(Cesium、ArcGIS、Mapbox),处理坐标转换,加载地形和影像数据,添加GIS功能,优化性能。同时提供教程资源和常见问题的解决方法,比如精度问题和坐标转换实现。</think>在Unity3D中开发基于WGS84参考系的GIS三维地球功能,可通过以下解决方案实现: ### 一、核心插件推荐 1. **Cesium for Unity**[^3] - 支持WGS84坐标系 - 提供真实地球曲率渲染 - 支持流式加载全球地形和卫星影像 ```csharp var cesiumWorld = new CesiumGeoreference(); cesiumWorld.SetOriginLongitudeLatitude(116.39, 39.91); // 北京坐标 ``` 2. **ArcGIS Maps SDK for Unity** - 提供地理坐标系与Unity局部坐标系转换 - 集成全球高程服务 $$ \begin{cases} x = (N + h)\cos\phi\cos\lambda \\ y = (N(1-e^2) + h)\sin\phi \\ z = (N + h)\cos\phi\sin\lambda \end{cases} $$ 其中$N$为卯酉圈曲率半径,$e$为椭球偏心率 3. **Mapbox Unity SDK** - 支持WGS84坐标系转换 - 提供3D地形生成工具 ### 二、开发流程 1. **坐标系转换** - 实现WGS84到ECEF(地心地固坐标系)转换 - ECEF到Unity局部坐标系转换 ```csharp Vector3 ConvertWGS84ToUnity(Vector3d wgs84) { // 坐标转换实现代码 return new Vector3(x, y, z); } ``` 2. **地球可视化** - 使用QuadTree进行地形分块加载 - 实现LOD层级过渡算法 3. **GIS功能集成** - 通过geo-golang库实现反向地理编码[^1] - 集成GPS定位模块 ### 三、性能优化 1. 使用**Jobs System**进行并行坐标计算 2. 采用**GPU Instancing**渲染重复地形元素 3. 实施**动态加载阈值**: $$ LOD_{level} = \begin{cases} 0 & \text{if } d > 1000m \\ 1 & \text{if } 500m < d \leq 1000m \\ 2 & \text{if } d \leq 500m \end{cases} $$ ### 四、教程资源 1. **Cesium官方教学**:包含完整的WGS84地球搭建案例 2. **ArcGIS开发指南**:提供坐标系转换最佳实践 3. **Unity地形优化白皮书**:讲解大规模地形渲染技术
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碳学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值