【Unity小技巧】Unity2D TileMap的探究(最简单,最全面的TileMap使用介绍)

news2024/7/6 6:50:42

文章目录

  • 前言
  • 介绍
  • 一、TileMap简单的使用
    • 1、创建Unity工程
    • 2、Tilemap的使用
      • 2.1、导入素材图片
      • 2.2、切割图片
      • 2.3、创建画板
      • 2.4、创建瓦片
      • 2.5、创建网格
      • 2.6、在网格上刷瓦片
      • 2.7、解决瓦片没有占满格子的问题
      • 2.8、解决瓦片之间有缝隙的问题
      • 2.9、擦除瓦片
      • 2.10、区域瓦片绘制
      • 2.11、瓦片吸取
      • 2.12、填充瓦片
      • 2.13、瓦片分层(渲染顺序)
      • 2.14、添加碰撞体
      • 2.15、合并碰撞体
  • 二、 Isometric Z as Y 的瓦片调色板(类似3d效果的2d)
    • 1、 创建模式为 Isometric Z as Y 的瓦片调色板
    • 2、创建网格
  • 三、导入瓦片官方拓展包
    • (一)规则瓦片 Rule Tile
      • 1、单一瓦片
      • 2、随机瓦片
      • 3、动画效果瓦片
    • (二)动画瓦片 Animated Tile
    • (三)规则覆盖瓦片 Rule Override Tile
    • (四)高级规则覆盖瓦片 Advanced Rule Override Tile
  • 四、代码管理 Tilemap
  • 源码
  • 参考
  • 完结

前言

之前有人在微信上找我,问了TileMap相关的知识
在这里插入图片描述

其实我之前有写过TileMap使用案例:【unity实战】随机地下城生成2——绘制地图Tilemap的使用及一些技巧的使用(含源码)

不过写的不是特别不是特别细致,只是简单的用了一下,所有这次特地打算单独写一篇文章,来介绍一下,下次还有人问我,我直接就把这篇文章丢给他,完美!

介绍

Unity的Tilemap 一般称之为瓦片地图或者平铺地图,是 Unity2017 中新增的功能,主要用于快速编辑 2D 游戏中的场景,通过复用资源的形式提升地图多样性。

Tilemap是一个用于创建2D地图的工具。它为游戏开发者提供了一种简单有效的方式来构建瓦片化的游戏世界,比如平台游戏、角色扮演游戏或策略游戏等。Tilemap可以用来实现各种元素,如背景、地形、墙壁、道具等。

使用Tilemap的好处是可以在编辑器中直观地创建和修改地图,而无需手动布局每个瓦片。Unity的Tilemap系统包含了一组工具和组件,来帮助开发者快速搭建地图。

在使用Tilemap时,你可以将地图分为网格,每个网格被称为一个单元(Tile)。每个单元都可以是一个图像或精灵,代表地图上的一个特定区域。你可以根据需要自定义单元的大小和形状。

Tilemap还提供了一组工具来快速绘制和编辑地图。你可以选择不同的图层,添加、删除或移动瓦片,调整瓦片的碰撞属性,使用自动贴图工具等等。这些功能可以让你更轻松地创建、修改和管理游戏地图。

另外,Unity的Tilemap系统还与碰撞检测和物理引擎紧密集成。你可以为地图中的瓦片设置碰撞区域,让角色或物体能够与地图进行交互。这使得开发地图相关的游戏机制变得更加简单和高效。
在这里插入图片描述

总结起来,Unity的Tilemap是一个强大的工具,可以帮助开发者创建和管理2D地图。它提供了一系列易于使用的编辑器功能和组件,让你能够更快速地建立自己的游戏世界。无论是初学者还是有经验的开发者,都可以通过Tilemap轻松地构建出具有丰富内容的游戏地图。

一、TileMap简单的使用

1、创建Unity工程

第一步,建一个Unity工程,注意选择2D模板,工程名叫TileMap好了。

注:如果你没有选2D模板也没事,创建工程后修改一下摄像机的projection为Orthographic(正交)模式即可。另外,选择2D模板,Unity会自动帮你下载2D的相关插件,比如2D Sprite、2D Tilemap Editor,这些插件也可以手动下载,后文我会讲到。

2、Tilemap的使用

2.1、导入素材图片

我们要制作关卡,得先有关卡的图片素材,以地形素材为例:
在这里插入图片描述
把素材图片导入到Unity工程中,如下,放在Sprites目录中

2.2、切割图片

先检查一下你是否安装了2D Sprite,如果没有,则先安装它。
现在,我们需要把整图的素材图片切割成一个个小格子图片,用于后面制作Tilemap的瓦片。
注意设置一下图片的类型为Sprite (2D and UI),将图片的Sprite Mode设置为Multiple(多个),然后点击Apply(应用)按钮保存。
在这里插入图片描述
接着,点击Sprite Editor按钮,打开编辑工具。
在弹出的Sprite Editor窗口中,点击切片按钮,然后选择类型为Grid By Cell Size,设置切割尺寸,比如我这里设置了16x16(因为最小格瓦片就是16x16),最后点击切片按钮。
ps:你也可以选择然后选择类型为Grid By Cell Count,设置列数和行数,比如可以这里设置了25 23,这里的列数行数需要根据你自己整图的排版而定
在这里插入图片描述
我们可以看到,整图生成了一张张小格子纹理图:
在这里插入图片描述

2.3、创建画板

先检查下你是否安装了2D Tilemap Editor插件,如果没有,则先安装它。
先创建一个TipleMap文件夹,用于下面存放画板文件。
接着点击菜单窗口 / 2D / Tile Palette(平铺调色板)
在这里插入图片描述
此时会打开平铺调色板窗口,点击创建新调色板按钮
输入画板名字,比如New Palette,点击创建按钮,就保存在刚才创建的TipleMap文件夹下
在这里插入图片描述
创建瓦片调色器相关参数

  • Name:瓦片调色器的名称
  • Grid:瓦片的网格布局
    • Rectangle:矩形瓦片
    • Hexagon:六边形瓦片
    • Isometric:等距瓦片,单元格为菱形
    • Isometric Z as Y:等距瓦片并且将单元格 Z 轴转换为局部 Y 坐标
  • Hexagon Type:六边形瓦片地图类型,决定了六边形的旋转位置
    • Point Top:点朝顶部的六边形
    • Flat Top:面朝顶部的六边形
  • Cell Size:瓦片绘制到单元格的大小
    • Automatic:基于瓦片资源的精灵大小自动设置
    • Manual:自定义大小

2.4、创建瓦片

先创建一个Tiles文件夹,用于存放下面的瓦片文件。
将整图拖入Tile Palette窗口中,选择瓦片保存目录为Tiles,即可将图片添加到画板中,并且生成瓦片文件。
在这里插入图片描述
我们也可以只拖某张小图到画板中,单独保存某张瓦片,像这样子:
在这里插入图片描述
生成的瓦片文件参数介绍:
在这里插入图片描述

  • Preview:预览图
  • Sprite:瓦片关联的精灵纹理
  • Color:瓦片色调颜色
  • Collider Type:碰撞器类型
    • None:不生成碰撞器
    • Sprite:基于精灵轮廓生成碰撞器形状
    • Gird:基于瓦片单元格生成碰撞器形状

2.5、创建网格

在Hierarchy视图空白处右键鼠标,点击菜单2D 对象 / 瓦片地图
在这里插入图片描述
此时就会在场景中创建一个Grid / Tilemap节点,此时在Scene场景中就可以看到一个个网格了。
在这里插入图片描述
Grid参数介绍
在这里插入图片描述

  • Cell Size:网格单元格的大小
  • Cell Gap:网格之间的间隔大小
  • Cell Layout:网格单元的形状和排列
    • Rectangle:矩形瓦片
    • Hexagon:六边形瓦片
    • Isometric:等距瓦片,单元格为菱形
    • Isometric Z as Y:等距瓦片并且将单元格 Z 轴转换为局部 Y 坐标
  • Cell Swizzle:Unity 将 XYZ 单元格坐标重新排序为你选择的类型

Tilemap参数介绍
在这里插入图片描述

  • Animation Frame Rate:播放瓦片动画的速率,相当于倍速
  • Color:瓦片色调颜色
  • Tile Anchor:瓦片的锚点偏移
  • Orientation:瓦片地图上瓦片的方向,相当于 2D 平面使用的是 Unity 中的哪两个轴

2.6、在网格上刷瓦片

打开刚刚的Tile Palette画板窗口,点击画笔(顶部第三个按钮,快捷键B),然后选中你要绘制的瓦片,在场景的格子中按住鼠标拖动即可在网格中连续画出瓦片了,如下:
在这里插入图片描述
不过这里我们发现了一个问题,瓦片图片并没有铺满一个格子,这是为什么呢?
在这里插入图片描述

2.7、解决瓦片没有占满格子的问题

瓦片图片没有铺满格子的问题,是因为在Unity中,一个单元格绘制多少像素是由图片本身设置决定的,我们选择瓦片整图,可以看到Pixels Per Unit是100,它表示一个单元格显示100个像素。
在这里插入图片描述
而我们一个瓦片图片的尺寸是16 x 16,
在这里插入图片描述
所以,想要让瓦片铺满一个格子,我们把Pixels Per Unit设置为16即可。
在这里插入图片描述
可以看到,现在瓦片刚好铺满一个格子了。
在这里插入图片描述

2.8、解决瓦片之间有缝隙的问题

虽然瓦片铺满了格子,但是它们之间是有缝隙的,而且图片模糊,我们在Game视图中观察可能会更清楚一点,如下:
在这里插入图片描述

解决办法是把瓦片整图的Filter Mode设置为点(无过滤器),
在这里插入图片描述
可以看到现在没有缝隙了,图片也清晰了
在这里插入图片描述

2.9、擦除瓦片

画瓦片的时候,可能不小心画错了,需要擦除。
我们只需在画板工具上点击橡皮擦按钮(快捷键D),然后在网格中点击即可擦除对应的瓦片,如下:
在这里插入图片描述

2.10、区域瓦片绘制

我们可以在画板找那个选中一个区域的瓦片,就可以直接在网格中一次画出来了,如下:
在这里插入图片描述

2.11、瓦片吸取

我们可以在画板中选择瓦片然后在网格中画,我们也可以直接在网格中通过吸取工具(快捷键I)选择对应的瓦片,如下:
在这里插入图片描述

2.12、填充瓦片

我们可以给一个闭包的区间填充瓦片(快捷键G),选中瓦片,然后在一个闭包的区域点击一下即可填充,如下:
在这里插入图片描述

2.13、瓦片分层(渲染顺序)

我们可以创建多个Tilemap,比如我创建了一个Tilemap2用来绘制柱子,
在这里插入图片描述
我们可以看到柱子的层与地面的层的渲染顺序不对
在这里插入图片描述
我们希望地面的层在前面,只需要选择地面的Tilemap把Order in Layer调大即可,比如调成1。(柱子层的Order in Layer是0)。
在这里插入图片描述
现在渲染顺序就对了,
在这里插入图片描述

2.14、添加碰撞体

注意:想要生成碰撞器的瓦片 Collider Type(及前面每个瓦片的碰撞器类型) 类型要进行设置,不能为 None

我们的主角需要能够站在地面上,所以地面层的Tilemap需要添加碰撞体,我们给地面层的Tilemap节点添加Tilemap Collider 2D组件,如下:
在这里插入图片描述
我们可以看到地面层的瓦片都带上了碰撞体。
在这里插入图片描述

2.15、合并碰撞体

我们可以看到,碰撞体是一格一格的,为了提升性能,建议把碰撞体进行合并,只需要在地面层的Tilemap节点再挂一个Composite Collider 2D组件(它会自动再挂一个Rigidbody 2D组件)。
在这里插入图片描述
将Rigidbody 2D组件的Body Type设置为Static(静态),否则地面会受到重力往下掉。
将Tilemap Collider 2D组件的Used By Composite(使用复合)勾选上,这样碰撞体格子会进行合并。
在这里插入图片描述
合并后的碰撞体如下:
在这里插入图片描述

二、 Isometric Z as Y 的瓦片调色板(类似3d效果的2d)

1、 创建模式为 Isometric Z as Y 的瓦片调色板

在这里插入图片描述
将资源拖入其中,会发现高度不同的图片并没有对齐

在这里插入图片描述
原因是在调色板中默认会将图片的中心点和菱形的中心点重合,我们这里需要在 Sprite Editor 窗口中调整 Sprite 的中心点即可
在这里插入图片描述
调整好后,方块的上表面即可与菱形平面对齐
在这里插入图片描述
也可以开启 Tile Palette 窗口中的 Can Change Z Position(锁定z轴位置),为每一张图片手动设置高度。按 “+” 和 “-” 可以快捷修改 Z 的高度
在这里插入图片描述

2、创建网格

在Hierarchy视图空白处右键鼠标,点击菜单2D 对象 / 瓦片地图/等距z作为Y
在这里插入图片描述

但此时在 Scene 窗口中绘制不同的方块时,其渲染情况会很奇怪
在这里插入图片描述
因为 Unity 内部设置的原因,我们需要修改 Edit --> Project Setting --> Graphics --> Camera Settings 中的 Transparency Sort Mode 为 Custom Axis,并将 X、Y、Z 设置为 0、1、-0.26。同时,将该 Tilemap 的 Tilemap Renderer 的模式切换为 individual,此时渲染情况将变得正常。
在这里插入图片描述
在这里插入图片描述

三、导入瓦片官方拓展包

拓展包为 Tilemap 添加新的瓦片类型,帮助我们更加方便的编辑 2D 场景
在这里插入图片描述
记得使用都是拖入我们设置好的瓦片,就可以和前面一样绘制了
在这里插入图片描述

(一)规则瓦片 Rule Tile

  • Default Sprite:默认图片
  • Default GameObject:默认游戏对象,一般不关联
  • Default Collider:默认碰撞器规则
    • None:不生成碰撞器
    • Sprite:基于精灵轮廓生成碰撞器形状
    • Gird:基于瓦片单元格生成碰撞器形状
  • Tiling Rules:平铺规则,可以自己添加删除

1、单一瓦片

在右边的九宫格内左键单击可以选中 ✔️,表示这个九宫格位置有图片;右键单击可以选中 ❌(注意:为空效果也是一样),表示这个九宫格位置没有图片,双击可以切换选中形态

当整个九宫格都满足自己设置的条件时,九宫格中央区域将显示最右方选择的图片

定义不同方向是否存在连接图片的规则,让我们更加快捷的进行地图编辑
在这里插入图片描述

效果演示,绘制会按配置的九宫格自动选择对应的瓦片填充区域
在这里插入图片描述

2、随机瓦片

适合做一些地图加工,比如随机添加花草树木
在这里插入图片描述
绘制效果
在这里插入图片描述

3、动画效果瓦片

这个和下面的Animated Tile,实现的效果其实是一样的,比如下面做的形成2d水流瀑布的效果
在这里插入图片描述

(二)动画瓦片 Animated Tile

可以指定序列帧,产生可以播放序列帧动画的瓦片,比如下面做的形成2d水流瀑布的效果
在这里插入图片描述

  • Number of Animated Sprites:动画有多少张图构成
  • Minimum Speed:最小播放速度
  • Maximum Speed:最大播放速度
  • Start Time:开始播放的时间
  • Start Frame:从哪一帧开始播放
  • Collider Type:碰撞器规则
    • None:不生成碰撞器
    • Sprite:基于精灵轮廓生成碰撞器形状
    • Gird:基于瓦片单元格生成碰撞器形状
      效果演示
      在这里插入图片描述
      运行,我们流动的瀑布效果就实现啦!
      在这里插入图片描述

(三)规则覆盖瓦片 Rule Override Tile

在规则瓦片的基础上,改变已经设置的规则对应的图片
在这里插入图片描述

(四)高级规则覆盖瓦片 Advanced Rule Override Tile

在规则瓦片的基础上,改变已经设置的规则与对应的图片,可以通过选择已有Rule Tile,启动禁用进行批量替换,是上面的更高级用法
在这里插入图片描述

四、代码管理 Tilemap

Tilemap 组件:用于管理瓦片地图

​ TileBase 组件:瓦片资源对象基类

​ Grid 组件:用于坐标转换

​ 使用它们需要引用命名空间:using UnityEngine.Tilemaps;

using UnityEngine;
using UnityEngine.Tilemaps;

public class TileMap : MonoBehaviour
{
    // 瓦片地图信息 可以通过它得到瓦片格子
    public Tilemap map;
    // 格子位置相关控制 可以通过它 进行坐标转换
    public Grid grid;
    // 瓦片资源基类通过它可以得到瓦片资源
    public TileBase tileBase;
    
    void Start()
    {
        // 1.清空瓦片地图
        // map.ClearAllTiles();
        
        // 2.获取指定坐标格子
        TileBase tmp = map.GetTile(new Vector3Int(-2, 0, 0));

        // 3.设置删除瓦片
        map.SetTile(new Vector3Int(0, -4, 0), tileBase); // 设置
        map.SetTile(new Vector3Int(-2, 0, 0), null);     // 删除

        // 4.替换瓦片
        map.SwapTile(tmp, tileBase); // tmp 的所有瓦片将变成 tileBase

        // 5.世界坐标转格子坐标
        // 传入的参数是世界坐标
        Debug.Log(grid.WorldToCell(new Vector3(0, 1, 0)));
    }
}

运行效果
在这里插入图片描述

源码

后面整理好,我再放上来

参考

【文章】https://blog.csdn.net/zheliku/article/details/124649019
【文章】https://blog.csdn.net/linxinfa/article/details/117135759

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,于是最近才开始自习unity。如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

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

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

相关文章

适合上班族做的4个低门槛的副业兼职

对于大多数职场中人来说,如果没有在30岁之后获得晋升,获得更好的发展平台,可能就会感到工作缺乏足够的吸引力了。当我们只有一份工作的时候,就好比把鸡蛋放在一个篮子里,把自己的青春放在一家公司里。这也就好比单一的…

华盛顿大学Baker实验室率先设计出双稳态结构蛋白质

在蛋白质世界,“结构决定功能”是一条基本原则。因此,很多人可能认为,一个蛋白质就应该有一个唯一确定的结构,使得它能够去执行确定的生物学功能。其实,在真实的世界中,蛋白质大多都是处于一种不断起伏的动…

MongDB【CRUD练习-条件查询-文档关系】

练习1-CRUD // 进入test数据库 use test; // 查询文档内容 db.students.find(); // 显示当前数据库中所有集合 show collections; // 向数据库的user集合中插入一个文档 db.users.insertOne({username: "lyh"} ); // 查看当前数据库中所有的集合 发现users集合被创建…

信号处理--基于EEG脑电信号的眼睛状态的分析

本实验为生物信息学专题设计小项目。项目目的是通过提供的14导联EEG 脑电信号,实现对于人体睁眼和闭眼两个状态的数据分类分析。每个脑电信号的时长大约为117秒。 目录 加载相关的库函数 读取脑电信号数据并查看数据的属性 绘制脑电多通道连接矩阵 绘制两类数据…

《强化学习:原理与Python实战》——可曾听闻RLHF

前言: RLHF(Reinforcement Learning with Human Feedback,人类反馈强化学习)是一种基于强化学习的算法,通过结合人类专家的知识和经验来优化智能体的学习效果。它不仅考虑智能体的行为奖励,还融合了人类专家…

LeetCode算法递归类—二叉树的右视图

目录 199. 二叉树的右视图 题解: 目标: 思路: 过程: 代码: 运行结果: 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所…

使用渲染纹理(RenderTexture)来实现3D视觉

如上图的效果,使用2D场景,通过摄像头的改动,使其看起来像是3D效果一样。 Nintendo Switch上刚推出的《超级马里奥》中,有一些关卡混合了2D和3D的画面, 一般来说,摄像机会直接渲染到电脑屏幕;…

【C语言练习】数组OJ题

目录 一.消失的数字思路1:思路2: 二.移除元素三.轮转数组四.删除有序数组中的重复项五.合并两个有序数组 一.消失的数字 题目: 思路1: 数组是从0加到N,所以把0到N的数加起来减去数组中的值,结果就是消失…

阿里云ECS服务器和轻量应用服务器区别?怎么选择?

阿里云轻量应用服务器和云服务器ECS有什么区别?ECS是专业级云服务器,轻量应用服务器是轻量级服务器,轻量服务器使用门槛更低,适合个人开发者或中小企业新手使用,可视化运维,云服务器ECS适合集群类、高可用、…

Cadence 仿真

电路的学习离不开仿真和实践,主流的仿真软件有很多,有用功pretues和mutisim,这次主要是工作中使用cadence,而且带有比较强大的仿真工具Pspice,所以选择了它 ,我使用的版本是cadence 17.4自带的。官方提供了…

ViT模型架构和CNN区别

目录 Vision Transformer如何工作 ViT模型架构 ViT工作原理解析 步骤1:将图片转换成patches序列 步骤2:将patches铺平 步骤3:添加Position embedding 步骤4:添加class token 步骤5:输入Transformer Encoder 步…

leetcode 213. 打家劫舍 II

2023.8.20 本题是 打家劫舍 的进阶版,房屋之间形成一个环了,也就是第一个房屋和最后一个房屋不能一起偷了。那么能偷的情况分为下列三种: 不考虑偷首房间。不考虑偷尾房间。不考虑偷首尾房间。 第三种情况包含于第一和第二种情况了&#xff…

CSerialPort教程4.3.x (1) - CSerialPort项目简介

CSerialPort教程4.3.x (1) - CSerialPort项目简介 前言 CSerialPort项目是一个基于C/C的轻量级开源跨平台串口类库,可以轻松实现跨平台多操作系统的串口读写,同时还支持C#, Java, Python, Node.js等。 CSerialPort项目的开源协议自 V3.0.0.171216 版本…

分组与引用:用正则实现更复杂的查找和替换操作

括号在正则中的功能就是用于分组。简单来理解就是,由多个元字符组成某个部分,应该被看成一个整体的时候,可以用括号括起来表示一个整体,这是括号的一个重要功能。其实用括号括起来还有另外一个作用,那就是“复用”。 …

Linux 线程同步——信号量

一、线程同步的概念 这里的同步就是对程序的执行进行控制,因为如果不进行控制就会出现错误的问题,这里的控制是为了保证程序的正确性。 线程同步指的是当一个线程在对某个临界资源进行操作时,其他线程都不可以对这个资源进行操作&#xff0…

json文件读取数据报错 AttributeError: ‘str‘ object has no attribute ‘items‘

trans_width_table表如下: {frozenset({2}): {3: 250, 2.5: 100, 1.5: 25, 2: 50, 1.8: 50, 2.75: 200, 5: 350, 4: 350, 2.3: 100, 4.5: 350, 3.5: 300}, frozenset({1, 3, 4, 5}): {2.5: 75, 2.75: 100, 1.5: 25, 4: 300, 3.5: 200, 4.5: 300, 3: 100, 5: 300, 2…

沁恒ch32V208处理器开发(六)BLE开发

目录 概述任务初始化任务的调度执行TMOS 处理事件方法 概述 CH32V 系列是基于青稞 32 位 RISC-V 设计的工业级通用微控制器,片上集成 2Mbps 低功耗蓝牙通讯模块,支持低功耗蓝牙 BLE5.x,低功耗蓝牙协议栈以及应用均基于 TMOS(Task…

光电比赛小车寻宝【1】--循迹策略

2023光电比赛总结:主要功能实现了,就是视频没做好,落选了非常的遗憾,也有很多的不甘心,也可以作为最后摆烂的惩罚吧,在这里总结一下经验教训。整体感觉时间不是非常充分,因为得到比赛的消息后突…

Linux之管理逻辑卷

目录 管理逻辑卷 认识LInux逻辑卷 LVM基本概念 部署逻辑卷 常用LVM部署命令 案例 管理与调整LVM卷 1.扩展卷组——添加/dev/nvme0n2p4物理卷到vg01中 2.在线扩展逻辑卷 管理逻辑卷 逻辑卷管理器是Linux 系统用于对硬盘分区进行管理的一种机制, 理论性较强 &…

安装搭建私有仓库 Harbor

目录 一. 准备环境 1.1安装 Docker 1.2安装 Docker Compose 二. 下载 Harbor 安装包 三. 解压安装包 四. 配置 Harbor 五. 安装 Harbor 六. 访问 Harbor 七. 创建项目、用户和角色 一. 准备环境 确保您的服务器满足 Harbor 的系统要求。最低要求是至少 2 核 CPU、4GB…