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);
}

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...