当前位置: 首页 > news >正文

Unity记录3.1-地图-TileMap简单使用、鼠标拖动放置Tile

文章首发及后续更新: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);
}

http://www.lryc.cn/news/29133.html

相关文章:

  • Decoupled Knowledge Distillation(CVPR 2022)原理与代码解析
  • IronWebScraper 2023.2.2 Crack
  • 【2.1 golong中条件语句if】
  • Scala编程(第四版)
  • aws apigateway 基础概念和入门示例
  • 2023年“中银杯”安徽省职业院校技能大赛网络安全A模块全过程解析
  • 【Python入门第二十四天】Python 迭代器
  • Qt扫盲-CMake 使用概述
  • minGW-w64配置途径
  • 程序、进程、线程的基本概念、信号量的PV操作、前趋图的PV操作
  • 设计测试用例
  • CSS 选择器以及CSS常用属性
  • 测试概念及模型
  • 王道计算机组成原理课代表 - 考研计算机 第六章 总线 究极精华总结笔记
  • 【C++升级之路】第八篇:string类
  • mysql性能优化_原理_课程大纲
  • 项目管理报告工具的功能
  • centos8上安装hbase
  • linux 进程及调度基础知识
  • Python计算分类问题的评价指标(准确率、精确度、召回率和F1值,Kappa指标)
  • 51单片机LCD1602的使用
  • [深入理解SSD系列综述 1.5] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?
  • zio1升级到zio2踩坑和总结
  • 【算法题】1834. 单线程 CPU
  • Vue学习[2023]
  • 【Redis】Redis分片集群
  • 【Android笔记81】Android之RxJava的介绍及其使用
  • Pr 定格拍照动画
  • 放弃node-sass,启用sass
  • 力扣旋转字符串