vue3+element plus 实现百度地图显示路径

news2024/11/26 18:49:16

在这里插入图片描述

添加依赖

<!-- index.html -->
    <script type="text/javascript" src="//api.map.baidu.com/getscript?v=3.0&ak=yI6kBeC9G4LntEWXklE2iNHwRUrmFEQc"></script>
    <script type="text/javascript" src="//api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay_min.js"></script>
    <script type="text/javascript" src="//api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script>
    <script type="text/javascript" src="//api.map.baidu.com/library/LuShu/1.2/src/LuShu_min.js"></script>

实现代码

注意:查询条件使用的自定义组件,不能直接复制使用。点聚合数量多时,页面会卡顿

// BaiduMap.vue
<template>
  <div class="content">
    <div id="mapContainer" class="map-container"></div>
    <div class="search-content">
      <div class="header-content" title="点我,点我,点我" @click="handleOpenDrawer">
        <div class="header-image"><Icon icon="ant-design:search-outlined" /></div>
        <!-- <el-image class="header-content-image" :src="openUrl" fit="fill"></el-image> -->
        <div class="header-control">检索</div>
      </div>
    </div>
    <!-- <div class="drawer-content">
        </div> -->
    <el-drawer v-model="drawer" title="详细信息" size="20%" @close="closeDrawer">
      <h-search-form
        :formModel="searchForm.searchModel"
        :formItems="searchForm.searchItems"
        @search="handleSearch"
      />
      <el-divider content-position="left"
        ><h3>{{ personName }}详细行程</h3></el-divider
      >

      <el-timeline>
        <template v-for="(item, index) in timelineData" :key="index">
          <el-timeline-item :timestamp="item.time" placement="top" :color="item.color">
            <el-card>
              <div v-html="item.content" @click="detailed(item.id)" class="point-list"></div>
            </el-card>
          </el-timeline-item>
        </template>
      </el-timeline>
    </el-drawer>
  </div>
</template>

<script setup>
import { onMounted } from 'vue'
import { reactive, toRefs, nextTick } from 'vue'
import request from '@/config/axios'
import { data } from '@/views/Test/map.json'
import hSearchForm from '@/h-components/Form/search-form.vue'
import { HSoft } from '@/utils/hsoft'
import { ElDrawer, ElDivider, ElTimeline, ElTimelineItem, ElCard } from 'element-plus'

const state = reactive({
  ak: 'xxxxxxxxxxxxxxxxxxxx',
  openUrl: new URL('@/assets/imgs/road.png', import.meta.url).href,
  drawer: false,
  searchForm: {
    searchModel: {},
    searchItems: [
      {
        type: 'h-person',
        // label:'人员',
        placeholder: '请输入姓名或工号',
        name: 'senderName',
        defaultValue: '',
        span: 3
      },
      {
        type: 'h-date',
        // label:'创建日期',
        //   placeholder:'请选择日期',
        name: 'createTime',
        valueType: 'daterange',
        defaultValue: '[new Date(2010, 9, 1), new Date(2010, 10, 1)]',
        clearable: true,
        disabled: false,
        startPlaceholder: '开始日期',
        endPlaceholder: '结束日期',
        style: { width: '20%' }
      }
    ]
  },
  map: null,
  timelineData: [],
  personName: '',
  lushu: null,
  polyline: null,
  path: [
    {
      lng: '113.408984',
      lat: '23.174023',
      html: '地点一',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.406639',
      lat: '23.174023',
      html: '地点二',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.403944',
      lat: '23.173566',
      html: '地点三',
      pauseTime: 3,
      name: '叶晨晨'
    },
    {
      lng: '113.400827',
      lat: '23.17394',
      html: '地点四',
      pauseTime: 3,
      name: '叶晨晨'
    },
    {
      lng: '113.397468',
      lat: '23.174496',
      html: '地点五',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.391494',
      lat: '23.174513',
      html: '地点六',
      pauseTime: 4,
      name: '叶晨晨'
    },
    {
      lng: '113.389032',
      lat: '23.174588',
      html: '地点七',
      pauseTime: 3,
      name: '叶晨晨'
    },
    {
      lng: '113.388736',
      lat: '23.173217',
      html: '地点八',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.388511',
      lat: '23.171888',
      html: '地点九',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.388592',
      lat: '23.170501',
      html: '地点十',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.38861',
      lat: '23.170219',
      html: '地点十一',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.38861',
      lat: '23.168342',
      html: '地点十二',
      pauseTime: 2,
      name: '叶晨晨'
    },
    {
      lng: '113.388574',
      lat: '23.165218',
      html: '地点十三',
      pauseTime: 2,
      name: '叶晨晨'
    }
  ]
})

const { searchForm, openUrl, drawer, timelineData, personName } = toRefs(state)

function init() {
  state.map = new BMap.Map('mapContainer')
  const point = new BMap.Point(116.404, 39.915)
  state.map.centerAndZoom(point, 10) //初始化地图,设置中心点坐标和地图级别
  state.map.enableScrollWheelZoom(true) //开启鼠标滚轮缩放
  state.map.addControl(new BMap.NavigationControl())
  state.map.addControl(new BMap.ScaleControl())
  state.map.addControl(new BMap.OverviewMapControl())
  makePolyPoints(state.map, data)

  // request({
  //     url:'@/views/test/map.json',
  //     method:'get'
  // }).then(res =>{
  //     console.log(res);
  //     state.data = res;

  // })
}

function makePolyPoints(map, data) {
  const MAPMarkers = []
  map.clearOverlays()

  data.forEach((point) => {
    const markerPoint = new BMap.Point(point.lng, point.lat)
    const MAPMarker = new BMap.Marker(markerPoint)
    MAPMarker.setTitle(point.name)
    // if (point.type == 'ip') {
    //   // 指定Marker的icon属性为Symbol
    //   const markerIcon = new BMap.Symbol(BMap_Symbol_SHAPE_POINT, {
    //     scale: 1, //图标缩放大小
    //     fillColor: '#f97d1c', //填充颜色
    //     fillOpacity: 0.8 //填充透明度
    //   })
    //   MAPMarker.setIcon(markerIcon)
    // }
    if (point.type == 'ip') {
      // 指定Marker的icon属性为Symbol
      const markerIcon = new BMap.Icon(
      new URL('@/assets/imgs/desktop4.png', import.meta.url).href,
      new BMap.Size(32, 32),
      { anchor: new BMap.Size(16, 16), imageSize: new BMap.Size(32, 32) }
      )
      MAPMarker.setIcon(markerIcon)
    }else{
      const markerIcon = new BMap.Icon(
      new URL('@/assets/imgs/laptop2.png', import.meta.url).href,
      new BMap.Size(32, 32),
      { anchor: new BMap.Size(16, 16), imageSize: new BMap.Size(32, 32) }
      )
      MAPMarker.setIcon(markerIcon)
    }
    //设置marker图标为水滴{

    MAPMarkers.push(MAPMarker)
    // 可以在点对象上添加属性,点击的监听能获取该属性
    // MAPMarker.zbbm = 'xxxxx';
    //信息窗体
    const opts = {
      width: 200,
      height: 120,
      title: point.name + '的位置',
      enableMessage: true
    }
    const sContent =
      '<p>所在位置:' +
      point.lng +
      ', ' +
      point.lat +
      '</p><div class=item-btn οnclick="recentTrips(' +
      point.id +
      ')">最近行程</div>'
    const infoWindow = new BMap.InfoWindow(sContent, opts)
    MAPMarker.addEventListener('click', function (e) {
      map.openInfoWindow(infoWindow, markerPoint)
    })
  })
  if (map.markerClusterer) {
    map.markerClusterer.clearMarkers()
  }
  // 使用点聚合
  map.markerClusterer = new BMapLib.MarkerClusterer(map, {
    markers: MAPMarkers
  })
}

function handleSearch() {
  //  state.drawer = false;
  // var myP1 = new BMap.Point(113.54958146244581,23.131467363279828);    //起点
  // var myP2 = new BMap.Point(116.424374,39.914668);    //终点
  // var myIcon = new BMap.Icon("../assets/icons/car.png", new BMap.Size(32, 70), {    //小车图片
  // 	//offset: new BMap.Size(0, -5),    //相当于CSS精灵
  // 	imageOffset: new BMap.Size(0, 0)    //图片的偏移量。为了是图片底部中心对准坐标点。
  // });
  // var driving2 = new BMap.DrivingRoute(state.map, {renderOptions:{map: state.map, autoViewport: true}});    //驾车实例
  // driving2.search(myP1, myP2);    //显示一条公交线路

  state.timelineData = [
    {
      time: '2018/4/12',
      content: '<h4>Update Github template</h4><p>Tom committed 2018/4/12 20:46</p>',
      color: '#0bbd87',
      id: 30
    },
    {
      time: '2018/4/3',
      content: '<h4>Update Github template</h4><p>Tom committed 2018/4/3 20:46</p>',
      color: '#cf4813',
      id: 31
    },
    {
      time: '2018/4/2',
      content: '<h4>Update Github template</h4><p>Tom committed 2018/4/2 20:46</p>',
      color: '#f0d695',
      id: 32
    }
  ]

  state.personName = '乔蓦然'

  // // 创建polyline对象
  makePolyPoints(state.map, state.path)
  const centerPoint = new BMap.Point(state.path[0].lng, state.path[0].lat)
  state.map.centerAndZoom(centerPoint, 17) //初始化地图,设置中心点坐标和地图级别
  makePolyline(state.path)
  makeLushu(HSoft.deepClone(state.path))
}

function makePolyline(path) {
  let point = []
  path.forEach((item) => {
    point.push(new BMap.Point(item.lng, item.lat))
  })
  //轨迹显示样式
  const sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {
    scale: 0.6, //图标缩放大小
    strokeColor: '#fff', //设置矢量图标的线填充颜色
    strokeWeight: '2' //设置线宽
  })
  const icons = new BMap.IconSequence(sy, '10', '30')

  state.polyline = new BMap.Polyline(point, {
    enableEditing: false, //是否启用线编辑,默认为false
    enableClicking: true, //是否响应点击事件,默认为true
    strokeColor: '#18a45b', //折线颜色
    strokeWeight: 8, //折线的宽度,以像素为单位
    strokeOpacity: 0.5, //折线的透明度,取值范围0 - 1
    icons: [icons]
  }) //创建折线
  state.map.addOverlay(state.polyline) //增加折线
}

function makeLushu(path) {
  let point = []
  path.forEach((item) => {
    point.push(new BMap.Point(item.lng, item.lat))
  })
  state.lushu = new BMapLib.LuShu(state.map, point, {
    defaultContent: '坐车车', //默认显示
    autoView: true, //是否开启自动视野调整,如果开启那么路书在运动过程中会根据视野自动调整
    icon: new BMap.Icon(
      new URL('@/assets/imgs/map-user.png', import.meta.url).href,
      new BMap.Size(32, 32),
      { anchor: new BMap.Size(16, 32), imageSize: new BMap.Size(32, 32) }
    ),
    speed: 4500,
    enableRotation: false, //是否设置marker随着道路的走向进行旋转
    landmarkPois: path
  })

  state.lushu.start()
}

function handleOpenDrawer() {
  state.drawer = true
}

const recentTrips = (id) => {
  console.log('近期行程')
  handleOpenDrawer()
  state.map.closeInfoWindow()
  handleSearch()
}

function closeDrawer() {
  console.log('关闭')
  makePolyPoints(state.map, data)
  state.personName = ''
  state.timelineData = []
}

function detailed(point) {
  let points = []
  switch (point) {
    case 30:
      points.push({ lng: '113.388511', lat: '23.171888', id: 30, name: '叶晨晨' })
      break
    case 31:
      points.push({ lng: '113.38861', lat: '23.168342', id: 30, name: '叶晨晨' })
      break
    case 32:
      points.push({ lng: '113.400827', lat: '23.17394', id: 30, name: '叶晨晨' })
      break
  }
  makePolyPoints(state.map, points)
  const centerPoint = new BMap.Point(points[0].lng, points[0].lat)
  state.map.centerAndZoom(centerPoint, 17) //初始化地图,设置中心点坐标和地图级别
  makePolyline(state.path)
}

onMounted(() => {
  nextTick(() => {
    init()
  })
  window.recentTrips = recentTrips
})
</script>

<style lang="less" scoped>
.map-container {
  height: calc(100vh - 84px - 40px);
}

:deep(.el-overlay) {
  width: 20%;
  position: unset;
}
.search-content {
  position: absolute;
  top: 22px;
  right: 22px;

  .header-content {
    cursor: pointer;
    background: #fff;
    padding-right: 12px;
    padding-left: 12px;
    display: flex;
    align-items: center;
    .header-image {
      width: 25px;
    }

    .header-control {
      font-size: 12px;
      line-height: 34px;
    }
  }
}
:deep(img) {
  max-width: inherit;
}
:deep(.item-btn) {
  cursor: pointer;
  color: #409eff;
}
:deep(.el-timeline) {
  padding-left: 0px;
}

:deep(.BMap_bubble_content) {
  overflow: auto;
  height: 90px;
}

.point-list {
  cursor: pointer;
}
</style>

坐标数据

// map.json
{
    "data":[{
        "id":1,
        "lng":"116.404",
        "lat":"39.925",
        "type":"ip",
        "name":"乔乔"
    },{
        "id":2,
        "lng":"116.404",
        "lat":"39.915",
        "type":"ip",
        "name":"孙悟空"
    },{
        "id":3,
        "lng":"116.395",
        "lat":"39.935",
        "name":"唐僧"
    },{
        "id":4,
        "lng":"116.415",
        "lat":"39.931",
        "type":"ip",
        "name":"观音菩萨"
    },{
        "id":5,
        "lng":"111.404",
        "lat":"38.925",
        "name":"土地公公"
    },{
        "id":6,
        "lng":"110.404",
        "lat":"31.925",
        "type":"ip",
        "name":"白龙马"
    },{
        "id":7,
        "lng":"113.384",
        "lat":"24.925",
        "name":"猪八戒"
    },{
        "id":8,
        "lng":"113.404",
        "lat":"23.925",
        "name":"太白金星"
    },{
        "id":9,
        "lng":"112.434",
        "lat":"39.925",
        "name":"沙悟净"
    },{
        "id":10,
        "lng":"116.414",
        "lat":"38.915",
        "name":"哪吒"
    },{
        "id":11,
        "lng":"116.404",
        "lat":"37.925",
        "name":"金毛吼"
    },{
        "id":12,
        "lng":"117.404",
        "lat":"39.925",
        "name":"嫦娥"
    },{
        "id":13,
        "lng":"116.404",
        "lat":"38.925",
        "name":"太上老君"
    },{
        "id":14,
        "lng":"114.404",
        "lat":"38.925",
        "name":"铁扇公主"
    },{
        "id":15,
        "lng":"111.404",
        "lat":"30.925",
        "name":"牛魔王"
    },{
        "id":16,
        "lng":"115.404",
        "lat":"39.915",
        "name":"红孩儿"
    },{
        "id":17,
        "lng":"115.404",
        "lat":"30.925",
        "name":"清风"
    },{
        "id":18,
        "lng":"118.404",
        "lat":"31.925",
        "name":"明月"
    },{
        "id":19,
        "lng":"117.404",
        "lat":"32.925",
        "name":"女儿国王"
    },{
        "id":20,
        "lng":"116.304",
        "lat":"39.825",
        "name":"白骨精"
    },{
        "id":21,
        "lng":"116.404",
        "lat":"39.725",
        "name":"蜘蛛精"
    },{
        "id":22,
        "lng":"116.504",
        "lat":"39.925",
        "name":"孔雀公主"
    },{
        "id":23,
        "lng":"116.414",
        "lat":"39.914",
        "name":"大鹏鸟"
    },{
        "id":24,
        "lng":"116.400",
        "lat":"39.920",
        "name":"老龟"
    }]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1492933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【vue/组件封装】封装一个带条件筛选的搜索框组件(多组条件思路、可多选)详细流程

引入&#xff1a;实现一个带有筛选功能的搜索框&#xff0c;封装成组件&#xff1b; 搜索框长这样子&#xff1a; 点击右侧筛选图标后弹出层&#xff0c;长这样子&#xff1a; 实际应用中有多组筛选条件&#xff0c;这里为了举栗子就展示一组&#xff1b; 预览&#xff1a;…

【小白学机器学习7】相关系数R,决定系数R2和SST=SSR+SSE, 离差,偏差,方差,标准差,变异系数,标准误。

目录 1 各种数据指标&#xff0c;分类整理 1.0 关于数据/值有3种 1.1 第1类&#xff1a;描述一堆数据特征的指标&#xff1a;集中度&#xff0c;离散度&#xff0c;形状特征 1.2 第2类&#xff1a;判断预测y值和观测值差距的指标 1.3 第3类&#xff1a;描述误差的各种指标…

给定长度为n的数组a,每一次操作可以使相邻两个元素都+1或者-1,可以进行任意次操作,求最终能否使数组非递减

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e18, maxm 4e4 5, …

矩阵爆破逆向-条件断点的妙用

不知道你是否使用过IDA的条件断点呢&#xff1f;在IDA进阶使用中&#xff0c;它的很多功能都有大作用&#xff0c;比如&#xff1a;ida-trace来跟踪调用流程。同时IDA的断点功能也十分强大&#xff0c;配合IDA-python的输出语句能够大杀特杀&#xff01; 那么本文就介绍一下这个…

K线实战分析系列之十八:十字线——判断行情顶部的有效信号

K线实战分析系列之十八&#xff1a;十字线——判断行情顶部的有效信号 一、十字线二、十字线总结三、三种特殊十字线四、长腿十字线五、墓碑十字线六、蜻蜓十字线七、特殊十字线总结 一、十字线 重要的反转信号 幅度较大的下跌&#xff0c;出现一根十字线&#xff0c;正好是在…

配置化脚手架cli工具开发实践

背景 我们服务于政务行业&#xff0c;正在打造一个集代码开发、数据集成、应用管理、一体化运维监控的应用支撑平台。 以此为导向&#xff0c;作为开发的第一步&#xff0c;代码工程创建应当为后续的集成、管理及监控等服务。所以区别于一般的cli工具&#xff0c;我们要做的工…

x6.js 流程图绘制笔记,常用函数

官方参考网站如下&#xff1a;https://antv-x6.gitee.io/zh/docs/tutorial/about 安装x6 输入以下命令 npm install antv/x6 --save 引用插件代码如下&#xff1a; import { Graph } from antv/x6; 创建绘制区域 this.guiX6 new Graph({container: document.querySelect…

相机恢复,这几个方法很重要!

“我的相机用了才不到一年&#xff0c;现在不知道是什么原因&#xff0c;有一些拍摄的图片找不到了&#xff0c;有什么方法可以恢复丢失的照片吗&#xff1f;” 对于热爱记录生活的用户来说&#xff0c;相机出现问题或相机数据丢失&#xff0c;都是一件很让人难过的事情。 在使…

文件上传{session文件包含以及条件竞争、图片文件渲染绕过(gif、png、jpg)}

session文件包含以及条件竞争 条件&#xff1a; 知道session文件存储在哪里 一般的默认位置&#xff1a; /var/lib/php/sess_PHPSESSID /var/lib/php/sessions/sess_PHPSESSID /tmp/sess_PHPSESSID /tmp/sessions/sess_PHPSESSID ####在没做过设置的情况下一般都是存储在/var…

基于Harris角点的室内三维全景图拼接算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1Harris角点检测原理 4.2 Harris响应函数 4.3 角点检测与筛选 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 dirs datasheet/;% 定义…

(十三)上市企业实施IPD成功案例分享之——杜邦

在化工行业&#xff0c;说起杜邦公司&#xff0c;可谓是“顶流”企业。作为一家有着200多年历史&#xff0c;历经了三个世纪的化工巨头&#xff0c;杜邦企业的发展史&#xff0c;就是化学工业&#xff0c;乃至整个科技水平的进步史。从1802年杜邦创立时主营的火药&#xff0c;到…

Redis 缓存机制如何提高应用程序的性能?

在数字时代&#xff0c;一拍脑门儿我们就能感觉到信息的海量和处理速度的迫切。不管是刷个微博、下个单&#xff0c;还是玩个游戏&#xff0c;我们都希望能快上加快&#xff0c;一点不拖泥带水。这时候&#xff0c;缓存技术就扮演了个大英雄的角色&#xff0c;它能让数据存取的…

Windows安装Go语言及VScode配置

最近搞自己的网站时突然想起来很多上学时的事&#xff0c;那会美国总统还是奥巴马&#xff0c;网页课教的是DreamWeaver跟Photoshop&#xff0c;其他语言像PHP、Java8、Python都有学一点&#xff0c;讲究一个所见即所得。虽然是信管专业那时和斌桑班长对新语言很感兴趣&#xf…

LC打怪录 希尔排序Shell sort 912.排序数组

Theory 希尔排序本质上是对插入排序的一种优化&#xff0c;它利用了插入排序的简单&#xff0c;又克服了插入排序每次只交换相邻两个元素的缺点。它的基本思想是&#xff1a; 将待排序数组按照一定的间隔分为多个子数组&#xff0c;每组分别进行插入排序。这里按照间隔分组指…

第二证券|中证1000认沽期权是什么?怎么买?

中证1000指数期权是以中证1000指数为标的资产的衍生品&#xff0c;其间中证1000认沽期权是指期权买方有权在约好的时刻以约好的价格将必定数量的标的资产卖给期权卖方的中证1000指数期权合约。 个人投资者想要生意认沽期权&#xff0c;需求去证券公司开通期权账户&#xff0c;…

阿里云2核4G服务器支持多少人同时在线?

2核4G服务器支持多少人在线&#xff1f;阿里云服务器网账号下的2核4G服务器支持20人同时在线访问&#xff0c;然而应用不同、类型不同、程序效率不同实际并发数也不同&#xff0c;2核4G服务器的在线访问人数取决于多个变量因素&#xff1a; 2核4G&#xff1a;2核CPU和4G内存对…

1.2_1 分层结构、协议、接口和服务

1.2_1 分层结构、协议、接口和服务 &#xff08;一&#xff09;为什么要分层&#xff1f; 主机A如果想要向主机B发送文件&#xff0c;则一定要经过中间的一些介质、链路。 发送文件前要完成的工作&#xff1a; 1.发起通信的计算机必须将数据通信的通路进行激活。 所谓的激活&a…

【码银送书第十三期】《ChatGPT原理与架构》

OpenAI 在 2022 年 11 月推出了人工智能聊天应用—ChatGPT。它具有广泛的应用场景&#xff0c;在多项专业和学术基准测试中表现出的智力水平&#xff0c;不仅接近甚至有时超越了人类的平均水平。这使得 ChatGPT 在推出之初就受到广大用户的欢迎&#xff0c;被科技界誉为人工智能…

gofly接口入参验证使用介绍

接口传入的参数做相关性质验证是开发中较为常用&#xff0c;gofly框架内置校验工具&#xff0c;提供开发效率&#xff0c;开发接口简单调用即可实现验证&#xff0c;下面介绍gofly框架数据验证设计思路及使用方法。 gofly框架提供了功能强大、使用便捷、灵活易扩展的数据/表单…

【unity】shader优化总结-转载

分为三个部分&#xff1a;Unity官方文档&#xff0c;GDC&#xff0c;个人经验。 Unity Manual 1.计算量优化。着色器进行的计算和处理越多&#xff0c;对性能的影响越大。针对不影响最终效果但依然进行计算的无效代码&#xff0c;进行移除操作。计算的频率也会影响游戏的性能…