草庐IT

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

碳学长 2023-11-05 原文

目录

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 将无法正确渲染要加载的数据集。

 

 

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

 

 

 

 

 

 

 

 

 

 

2、项目设置

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

 

 

1、Edit/Project Settings/Package Manager

打开 Edit/Project Settings

 

 

在 Package Manager 中设置如下:

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

 

 

2、Window/Package Manager

选择 Window/Package Manger

 

 

点击 Packages,选择 My Registries

 

 

选中 Cesium for Unity,点击 install

 

 

 

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

 

 

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

 

 

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

 

 

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

 

 

3、登录 Cesium icon

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

 

 

 

 

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

 

 

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

 

 

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

 

 

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

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

 

 

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

 

 

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

  

 

 

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

中分别点击添加即可。

2、添加数据

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

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

 

 

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

 

 

添加 Bing Maps 影像:

 

 

添加 Cesium OSM Buildings:

 

 

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

 

 

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

 

 

2、配置主摄像头

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

 

 

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

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

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

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

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

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

 

 

 

 

3、设置场景默认坐标

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

 

 

如下,调整为上海位置。

 

 

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

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

 

 

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

 

 

3、点击 Cesium3DTileset 图层进行设置

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

 

 

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

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

 

 

5、双击图层定位到

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

 

 

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

 

 

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

 

 

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

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

 

 

同理,可以从任何服务器或本地加载 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,执行构建打包。

 

 

5、运行

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

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

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

 

 

 

 

有关Cesium For Unity 最新实践流程2 - 20221208的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. 报告回顾丨模型进化狂飙,DetectGPT能否识别最新模型生成结果? - 2

    导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri

  3. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  4. ruby-on-rails - Rails 中同一个类的多个关联的最佳实践? - 2

    我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来

  5. ruby-on-rails - 向 Rails 3 添加 Ruby 扩展方法的最佳实践? - 2

    我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion

  6. Ruby 最佳实践 : working with classes - 2

    参见下面的示例,我想最好使用第二种方法,但第一种也可以。哪种方法最好,使用另一种的后果是什么?classTestdefstartp"started"endtest=Test.newtest.startendclassTest2defstartp"started"endendtest2=Test2.newtest2.start 最佳答案 我肯定会说第二种变体更有意义。第一个不会导致错误,但对象实例化完全过时且毫无意义。外部变量在类的范围内不可见:var="string"classAvar=A.newendputsvar#=>strin

  7. ruby - 存储外部 API 的密码 - 最佳实践 - 2

    如果我构建了一个应用程序来访问来自Gmail、Twitter和Facebook的一些数据,并且我希望用户只需输入一次他们的身份验证信息,并且在几天或几周后重置,那会怎样是在Ruby中动态执行此操作的最佳方法吗?我看到很多人只是拥有他们客户/用户凭证的配置文件,如下所示:gmail_account:username:myClientpassword:myClientsPassword这看起来a)非常不安全,b)如果我想为成千上万的用户存储此类信息,它就无法工作。推荐的方法是什么?我希望能够在这些服务之上构建一个界面,因此每次用户进行交易时都必须输入凭据是不可行的。

  8. 最新版人脸识别小程序 图片识别 生成二维码签到 地图上选点进行位置签到 计算签到距离 课程会议活动打卡日常考勤 上课签到打卡考勤口令签到 - 2

    技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进

  9. ruby-on-rails - 使用设计身份验证的 API 访问 - 最佳实践? - 2

    我正在使用Devise在Rails应用程序中,并希望通过API公开一些模型数据,但应该像应用程序一样限制对API的访问。$curlhttp://myapp.com/api/v1/sales/7.json{"error":"Youneedtosigninorsignupbeforecontinuing."}很明显。在这种情况下是否有访问API的最佳实践?我更喜欢一步验证+获取数据,但这只是为了让客户的工作更轻松。他们将使用JQuery在客户端提取数据。感谢您提供任何信息!凡妮莎 最佳答案 我建议您按照以下帖子中的选项2:使用APIke

  10. ruby-on-rails - 在多个页面上使用相同表单的 Rails 最佳实践 - 2

    我正在开发一个Rails2.3.1网站。在整个网站中,我需要一个用于在各种页面(主页、创建帖子页面、帖子列表页面、评论列表页面等)上创建帖子的表单——只要说这个表单需要在由各种Controller)。这些页面中的每一个都显示在相应的Controller/操作中检索到的各种其他信息。例如,主页列出了最新的10篇文章、从数据库中提取的内容等。因此,我已将帖子创建表单移动到它自己的部分中,并将该部分包含在所有必要的页面中。请注意,部分POST中的表单到/questions(路由到PostsController::create——这是默认的Rails行为)。我遇到的问题是当Posts表单没有正

随机推荐