SuperMap Hi-Fi 3D SDK for Unity基础开发教程

这篇具有很好参考价值的文章主要介绍了SuperMap Hi-Fi 3D SDK for Unity基础开发教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:kele

一、背景

众所周知,游戏引擎(Unity)功能强大,可以做出很多炫酷的游戏和动画效果,这部分功能的实现往往不仅仅是靠可视化界面就能够实现的,还需要代码开发。SuperMap Hi-Fi SDKS for Unity游戏引擎插件能够实现地理数据与游戏引擎相结合,碰撞出更绚烂的火花,目前SuperMap Hi-Fi SDKS for Unity插件集成了许多可视化界面操作功能,但是在正式的开发环境中,往往不太能满足客户对于功能入口、界面UI的个性化需求,所以这部分功能的实现需要用到代码开发。

二、开发准备

2.1 开发软件下载

产品 推荐版本 介绍 下载地址
Unity Hub 3.3.1 - c2(最新版即可) 使用 Unity Hub 可以更方便地创建、打开、管理和更新 Unity 项目1、 项目管理:Unity Hub 支持创建、打开和管理Unity项目2、 引擎管理:Unity Hub 能够同时安装和管理多个Unity引擎版本3、 社区资源:Unity Hub 提供了一个集中的位置,让用户可以轻松访问 Unity 社区资源 https://unity.cn/releases
Unity 2019.4.39 f1c1 游戏引擎软件,可通过官网下载或者通过Unity Hub 下载(如果需要打包到 WebGL ,必须使用2019版本) https://unity.cn/releases
Visual Studio 2019 开发工具,用于 Unity 二次开发 https://visualstudio.microsoft.com/zh-hans/downloads
SuperMap Hi-Fi 3D SDK for Unity 11.1.1 超图游戏引擎(Unity)插件,可通过SuperMap官网下载 http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx

2.2 开发接口介绍

所有开发接口位于插件包文件夹下 SuperMap Hi-Fi 3D SDK for Unity 接口参考文档.xlsx 内。
常用接口类介绍:

名称 描述
SuperMapSDK SuperMap SDK 命名空间,包含数据加载、三维分析等功能
RealspaceView 接口主类,控制整个场景
Scene 三维场景类。三维数据会依据地理空间参考信息,填加到三维场景中
CameraState 相机状态类
Layer3D 三维图层类。该类提供了三维图层显示控制等便于三维地图管理的一系列属性
Layer3DS3MFile 缓存图层类
Style3D 图层风格类

三、开发步骤

3.1 创建canvas

在项目根节点上右键:GameObjects-UI-Canvas,创建Canvas用于放置UI元素
SuperMap Hi-Fi 3D SDK for Unity基础开发教程,3d,unity,游戏引擎

3.2 创建导航栏

在Canvas节点上右键:UI-Image,创建image对象,之后调整大小以及位置,使其位于Canvas顶部
SuperMap Hi-Fi 3D SDK for Unity基础开发教程,3d,unity,游戏引擎
将准备好的图片拖拽至工程目录下,选择图片后在右边属性面板中,将 Texture Type 选择为 Speite(2D and UI),然后通过鼠标鼠标将处理好的图片拖拽到 image 下 Source Image 中,导航栏就制作完成了;接下来通过同样的方法添加 Text 和 Button 用来展示项目名称与功能入口
SuperMap Hi-Fi 3D SDK for Unity基础开发教程,3d,unity,游戏引擎

3.3 创建脚本

在 Asset 下创建文件夹,并在文件夹内创建 C# Script,命名为 location
SuperMap Hi-Fi 3D SDK for Unity基础开发教程,3d,unity,游戏引擎
双击 C# 脚本,默认用 Visual Studio 打开编辑(如果没有安装,请参考2.1进行安装)。先编写飞行定位页面,编写好后点击保存,之后返回Unity
SuperMap Hi-Fi 3D SDK for Unity基础开发教程,3d,unity,游戏引擎

3.4 关联设置

回到Unity界面在左侧的层级视图(Hierarchy)面板中找到GameObjeect,点击右侧And Component,添加 location 的Script,将cs和自己创建的项目相关联,具体操作如下图所示:
SuperMap Hi-Fi 3D SDK for Unity基础开发教程,3d,unity,游戏引擎
SuperMap Hi-Fi 3D SDK for Unity基础开发教程,3d,unity,游戏引擎

3.5 运行结果

SuperMap Hi-Fi 3D SDK for Unity基础开发教程,3d,unity,游戏引擎文章来源地址https://www.toymoban.com/news/detail-775673.html

四、功能开发示例

4.1 添加图层

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using SuperMapSDK;

public class location : MonoBehaviour
{
    public void addLayer()
    {
        CameraState state = new CameraState(104.05099856483271,30.651860100062148, 5000, 0, 0, 0);
        SupermapGIS.Instance.Realspace.SceneControl.Scene.Fly(state, 4000);
        //添加s3m图层,不添加到队列最前面
        SupermapGIS.Instance.Realspace.SceneControl.Scene.Layers.Add(
            "E:/sampledata/SampleData/Cache/Building/Building.scp", //缓存文件地址
            Layer3DType.S3M,   //图层类型
            false,    //是否添加到最前面
            "Building"   //图层名称
        );    
        //添加影像图层           
        SupermapGIS.Instance.Realspace.SceneControl.Scene.Layers.Add(
            "E:/sampledata/SampleData/Cache/BeijingTerrain@BeijingTerrain/BeijingTerrain@BeijingTerrain/
            BeijingTerrain@BeijingTerrain.sci3d", 
            Layer3DType.Map, 
            false, 
            "Beijingimg"
        );            
        //添加地形图层          
        SupermapGIS.Instance.Realspace.SceneControl.Scene.TerrainLayers.Add(
            "E:/sampledata/SampleData/Cache/BeijingTerrain@BeijingTerrain/
            BeijingTerrain@BeijingTerrain_Terrain/BeijingTerrain@BeijingTerrain_Terrain.sct", 
            false
        );       
        //添加在线S3M服务
        SupermapGIS.Instance.Realspace.SceneControl.Scene.Layers.Add(
            "http://localhost:8090/iserver/services/3D-local3DCache-Ground/rest/realspace",
            Layer3DType.S3M, 
            "Ground",
            false);
    }
}

4.2 飞行定位到指定图层

Realspace = new RealspaceView();
Scene scene = SupermapGIS.Instance.Realspace.SceneControl.Scene;//获取场景
//获取图层管理器里所有图层
List<LayerInfo> layerInfos = SupermapGIS.Instance.Layers.LayerInfos;
for (int i = 0; i < layerInfos.Count; i++)
{
     //遍历获取图层管理器里每个图层
     Layer3D layer3D = layerInfos[i].Layer as Layer3D;
     if (layer3D.Type == Layer3DType.S3M)
     {
          //获取S3M缓存图层    
          if (layer3D.Name.Contains("Water"))
          {
               //Vector3 pos = new Vector3();                 
               var bounds = layer3D.Bounds;
               pos = new Vector3((float)bounds.Center.x,(float)bounds.Center.y, 2000);
               CameraState state = new CameraState(pos.x, pos.y, pos.z, 0, 0, 0);             
               SupermapGIS.Instance.Realspace.SceneControl.Scene.Fly(state, 4000);
           };               
       }
}

4.3 飞行定位到指定坐标位置

CameraState state = new CameraState(114, 39, 4000, 0, 0, 0); 
SupermapGIS.Instance.Realspace.SceneControl.Scene.Fly(state, 4000);

4.4 点击模型获取属性

Realspace = new RealspaceView();
Scene scene = SupermapGIS.Instance.Realspace.SceneControl.Scene;//获取场景
//获取图层管理器里所有图层
List<LayerInfo> layerInfos = SupermapGIS.Instance.Layers.LayerInfos;
for (int i = 0; i < layerInfos.Count; i++)
{
     //遍历获取图层管理器里每个图层
     Layer3D layer3D = layerInfos[i].Layer as Layer3D;
     if (layer3D.Type == Layer3DType.S3M)
     {
          //获取S3M缓存图层    
          if (layer3D.Name.Contains("Building"))
          {
              Selection3D selection = layer3D.Selection;
              int id = selection.LastSelectID;
              Layer3DS3MFile layer3DS3MFile = layerInfos[i].Layer as Layer3DS3MFile;//获取S3M缓存图层
              var selectID = layer3DS3MFile.GetAllFieldValue(id);
              foreach (var element in selectID)  //element的类型与mList声明时一样
              {
                   Debug.Log(element);   //输出属性
              };
           }
      }
}

4.5 修改图层风格

if (s3mLayer != null && s3mLayer.Type == Layer3DType.S3M && s3mLayer.Name.Contains("矢量面")){
    //设置初始风格
    Style3D style = s3mLayer.Style;
    style.FillColor = new Color(1, 0.4f, 0, 0.5f); //矢量面黄色填充
    style.LineColor = new Color(1.0f, 0.0f, 0.0f, 1.0f);//矢量面绿框
    style.AltitudeMode = AltitudeMode.ClampToGround; //矢量面贴地
    s3mLayer.Style = style;
    //设置选中风格
    Style3D selectstyle = s3mLayer.SelectStyle;
    selectstyle.FillColor = new Color(0.0f, 0.0f, 1.0f, 0.5f); //矢量面选中时红色填充
    selectstyle.AltitudeMode = AltitudeMode.ClampToGround;
    s3mLayer.SelectStyle = selectstyle;
    s3mLayer.UpdateData();
}else if (s3mLayer != null && s3mLayer.Type == Layer3DType.S3M && s3mLayer.Name.Contains("倾斜")){
    s3mLayer.ClampVector = true;  //矢量面贴倾斜、模型图层
    s3mLayer.MinVisibleAltitude = 2000;   //设置图层最小可见距离
    s3mLayer.MaxVisibleAltitude = 50000;  //设置图层最大可见距离
}

到了这里,关于SuperMap Hi-Fi 3D SDK for Unity基础开发教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SuperMap Hi-Fi 3D SDK for Unreal游戏引擎打包常见问题

    目录 前言 常见问题 1. UE打包报错:ERROR: No target name was specified on the command-line. 2. UE打包报错:ERROR: Expecting to find a type to be declared in a module rules named ‘XXX’ 3. UE打包报错:Error: System.ArgumentException: An item with the same key has already been added. Key: PakLoader

    2024年02月03日
    浏览(51)
  • SuperMap Hi-Fi 3D SDK for Unreal游戏引擎创建工程报错汇总

    作者: 姜尔         同学们首次使用UE时创建工程时,总会遇到些许问题,本文为首次接触UE的同学提供参考以更好的使用到SuperMap Hi-Fi 3D SDK for Unreal插件。 目录 一、报错“尝试生成项目文件时发生错误” 1.“The required library hostfxr.dll could not be found” 【出现报错】

    2024年02月03日
    浏览(66)
  • SuperMap iClient3D for Cesium 构建隧道

    作者:kele 前段时间看到一篇构建隧道的文章(https://blog.csdn.net/supermapsupport/article/details/128453116),突然想到一个使用场景:隧道通常是建在山体下面,是否可以通过这种方式构建出一条贯穿山体的隧道,来模拟实际的施工方案?答案是可以,效果图如下: 1、生成隧道模型

    2024年02月01日
    浏览(81)
  • SuperMap iClient3D for Cesium最短路径分析

    作者:Mei    在交通、消防业务场景中,如果某地发生火灾或者交通事故,需要快速规划出最短抢救路线,这就要用到网络分析中的最短路径分析功能。接下来就跟着小编一起看看,在三维场景中,如何实现最短路径分析。    首先在iDesktop中通过二维线构建网络数据集,

    2024年02月11日
    浏览(56)
  • SuperMap iClient3D for WebGL查询地图栅格值

    栅(shān)格数据就是将空间分割成有规律的网格,每一个网格称为一个单元,并在各单元上赋予相应的属性值来表示实体的一种数据形式。每一个单元(像素)的位置由它的行列号定义,所表示的实体位置隐含在栅格行列位置中,数据组织中的每个数据表示地物或现象的非几何

    2024年02月04日
    浏览(52)
  • SuperMap iClient3D for WebGL/Cesium端性能优化

        目录 一、请求优化 1.1 多子域 1.1.1 scene.open()打开场景 1.1.2 加载地形 1.1.3 加载影像 1.1.4 加载S3M 1.1.5 加载MVT 1.2 批量请求 1.2.1 地形 1.2.2 影像 二、内存优化 2.1 根节点驻留内存 2.2 自动释放缓存 2.3 内存管理 三、图层优化 3.1 LOD 3.2 空间索引 3.3 控制图层显示范围 3.4 控制图层

    2024年01月25日
    浏览(49)
  • 【超图】SuperMap iClient3D for WebGL/WebGPU ——颜色(1)

    作者:taco         在项目中通常会出现,高亮对象。给对象设置颜色的一些问题。那么针对颜色设置在超图的 iClient3D for WebGl/WebGPU 中又提供了哪些方式呢?本篇文章将介绍一些颜色的设置方法。以及一些颜色的参数设置。         在iClient3D for WebGl/WebGPU 中主要以Supe

    2024年02月04日
    浏览(57)
  • SuperMap iClient3D for Cesium 实现图层下钻功能

    目录 前言 一、所需数据及发布服务 1、数据准备  2、地图展示 二、Cesium.SuperMapImageryProvider 接口 三、相关代码         实现地图下钻功能可以提供更详细的地理信息、支持交互式探索、展示层级关联的数据和提供数据分析决策支持等优势。通过点击地图上的区域或点,用

    2024年02月03日
    浏览(86)
  • vue3+SuperMap iClient3D for Cesium实现可视域分析功能

    本人小白一枚,文章如有问题还请各位大神评论区指出。整体实现是参考SuperMap iClient3D for Cesium的可视域分析功能源码~ 文章目录 前言 一、主要功能 二、使用步骤 1.HTML主要结构 2.javascript SuperMap iClient3D for Cesium中的ViewShed3D类提供了可视域分析,设置观察点、目标的位置,水平

    2024年02月15日
    浏览(44)
  • 【超图】SuperMap iClient3D for WebGL/WebGPU —— 坐标系&位置 —— Cartesian2

    作者:taco         说到关于地理必然逃不开位置的关系。借用百度百科的内容来说 地理学(geography) ,是研究地球表层 空间地理 要素或者地理综合体 空间分布规律 、时间演变过程和 区域 特征的一门学科。 所以 位置坐标系 必然逃不掉了。那么在SuperMap iClient3D for Web

    2024年01月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包