Unity记录3.1-地图-TileMap简单使用、鼠标拖动放置Tile
创始人
2024-05-28 21:29:22
0次

文章首发及后续更新:https://mwhls.top/4456.html,无图/无目录/格式错误/更多相关请至首发页查看。
新的更新内容请到mwhls.top查看。
欢迎提出任何疑问及批评,非常感谢!

汇总:Unity 记录

上章的课程接下来是巡逻的敌人,不过我地图还没创建好,教程的 AI 估计不适合,所以先停一下,搞地图,这部分估计比较久咯。

参考:
Unity 中文手册 2021.1
Unity 2D-Extras

目录 Tilemap 创建-2023/02/22 Unity 2D-Extras-2023/2/23 基于神经网络的 AI-2023/02/24 Terrain tiles 规则-2023/02/25 鼠标事件-2023/02/26 鼠标按下生成 Tile-2023/02/26

Tilemap 创建-2023/02/22

  • 手册写的好繁琐。
  • 创建个 Tilemap,然后把贴图弄进去变成 tile,再调整 tile size,或者对应调整贴图的 Pixels Per Unit,让一个贴图占满一个 tile。
    • 这个我弄的倒是很简单,Pixels Per Unit 用的是默认 100,然后把 tile size 调成 0.5 就刚刚好。
    • 我的每个贴图是 25×25 的。
  • 然后给 tilemap 加一个 tile collider 2d,即可添加碰撞。

Unity 2D-Extras-2023/2/23

  • 看 Tilemap 教程的时候发现官方有额外的 2D 插件,考虑到我目前还没见过和我想象中一样的 2D 世界,所以先把这个 2D 插件翻翻。
    • Unity 2D-Extras
    • 理论上是把所有功能都了解一下,看看能不能拓展一下思路。
  • 笔刷
    • Random:随机 Tile。
    • Prefab:放预制件。
    • Group:同组。
  • Tiles
    • Animated:序列播放贴图
    • Pipeline:根据周围四格 Tile 改变自身材质,应该就是 1×1 和 1×2 的图像不一样的那种。
    • Terrain:Pipeline 的升级版,八格。
    • 挺好,当时我看有人实现了东西,用的双重循环,我还想着卷积可以改进,官方有提供自然更好了。
    • 或者叫滤波器,一个 3×3 滤波器,刚好 GPU 可以加速。
  • 惊了,怎么看一会就没了。
    • 我还想着看个几天,期待会有地图生成的工具呢,可恶。
    • 简单看了一下 Terrain 的源码,似乎是朴素的实现方式,不知道是不是有其它加速。

基于神经网络的 AI-2023/02/24

  • 刷视频刷到一个用神经网络实现的 AI,心痒痒,但是想想如果拿去训小怪的话应该会很麻烦,如果只训练一个的话感觉有点可行性,以后再说。

Terrain tiles 规则-2023/02/25

  • 按 GitHub 上讲的安装了,我还以为没装成功,没找到 tile 在哪,原来得在资产里创建。
  • Terrain tiles 的规则如下图,标号表示 Tile 从上到下的顺序。
    • 这玩意这么重要怎么没人画图,可恶,本来就感觉好些重复没必要画但是还是 CV 了,结果真不要画。
    • 我觉得这三张图重要到可以单独开一篇了,见:Unity记录3.2-地图-Tilemap中Terrain的连接规则

鼠标事件-2023/02/26

  • 参考:unity 2d 四大坐标系问题 鼠标点击位置问题 详细入门解析
  • 实现了一下按下鼠标获得世界位置,进而获得在 Tilemap 的位置。
    • 最近看到了这个视频:Unity语句解释 脚本放到物体上什么都不用设置就能被用户控制移动(野路子我个人通用角色移动代码)
    • 这位 UP 主上月球去写甲骨文真的很有开源精神,给大家推荐一下,会讲单个 Unity 语句的使用方式。
    • 我也有考虑过发视频,虽然宿舍大部分时间都只有我一个人,不过还是等以后再说。
    • 提到这个视频是因为它给了我一个想法,做一个通用(至少大部分通用)的操纵方式,灵魂岂是如此不便之物。
    • 这种通用操纵和我脑海的背景挺符合的,而且感觉有实现可行性。

鼠标按下生成 Tile-2023/02/26

  • Tilemap 里瓦块的动态添加与删除
  • 按着鼠标左键,鼠标位置会生成 Tile。
  • 关键代码如下:
void Update(){if (input_base.isKeydown("Fire1")){Vector3Int pos_tilemap = tilemap_modify.WorldToCell(input_base.get_mouse_pos(1));place_tile(tilemap_modify, pos_tilemap, tile_place);}
}

void place_tile(Tilemap tilemap, Vector3Int pos, TileBase tile){
tilemap.SetTile(pos, tile);
}

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...