伟兮の小屋

「What I cannot create, I do not understand」

「Unity」沙盒建造游戏设计(4) - 搜索算法

前言在近期的公司项目中,需求项目开发一个类沙盒建造功能。我有幸负责项目中的关键部分,这一经历充满了挑战与收获。鉴于这个部分内容的丰富性和技术性,我决定将涉及相关设计以及本人的一部分思绪分成四期内容。本文是系列文章的最后一期,将聊一聊沙盒模式中的搜索算法。 在沙盒游戏中二维数组甚至三位数组的管理中基本上来说搜索算法是避免不了了, 用以上算法可以实现: 生成物品、寻路、AI行为, 属于是比较特化的内容. 本期的核心内容会主要围绕着笔者开发的复制内容深入浅出的聊聊搜索算法这部分, 从算法选取的考量, 跟后面算法优化的处理. 分类DFS(Depth-First-Search): 深度优先搜索最常见的搜索算法之一, 中等难度面试题常客, 在解决树、矩阵、八皇后、数独等定制问题的好手, 做简要提及, 在沙盒游戏中并不能作为主角 BFS(Breadth-first search): 广度优先搜索也是常见算法, DFS的好基友, 与上者不同的…

「Unity」沙盒建造游戏设计(3) - 状态模式

前言在近期的公司项目中,需求项目开发一个类沙盒建造功能。我有幸负责项目中的关键部分,这一经历充满了挑战与收获。鉴于这个部分内容的丰富性和技术性,我决定将涉及相关设计以及本人的一部分思绪分成四期内容。本文是系列文章的第三期,将重点讨论建造中的状态模式设计。 运用状态模式主要目的还是为了解耦, 这种大型的系统设计如果还让if-else影响自己的代码判断能力, 那就太得不偿失了. 本篇将从每种状态设计开始, 再到整体的系统设计, 最后还会附上状态模式中一些笔者踩到的坑, 该篇同样为主要讲解篇章之一. 状态模式构成状态模式(State Pattern)也是行为设计模式的一种, 他的出现通常都跟有限状态机强相关. 通常的需求中状态出现的其实也是非常频繁, 很多地方也能用到该模式. 用该模式会带来一下几个好处: 单一职责原则: 将与特定状态相关的代码放在单独的类中。 开闭原则: 无需修改已有状态类和上下文就能引入新状态。 通过消除臃肿…

「Unity」沙盒建造游戏设计(2) - 命令模式

前言在近期的公司项目中,需求项目开发一个类沙盒建造功能。我有幸负责项目中的关键部分,这一经历充满了挑战与收获。鉴于这个部分内容的丰富性和技术性,我决定将涉及相关设计以及本人的一部分思绪分成四期内容。本文是系列文章的第二期,将重点讨论建造中的命令模式设计。 为什么会有命令模式相关的内容呢? 允许用户根据不同的请求对操作进行参数化、排队、记录日志以及撤销操作等。这是大部分带有编辑模式内容不可会缺的一环, 本篇将从基础的命令模式内容讲起, 到业务层基础的命令搭建, 再到整体的框架设计,这篇文章是系列讲解中的重点之一. 命令模式命令模式(Command Pattern)是一种行为设计模式,它将请求或简单操作封装为一个对象,这样可以使用不同的请求、队列或日志来参数化其他对象。同时,它也支持可撤销的操作。 >> 关于行为设计模式 行为设计模式是一类设计模式,它主要关注对象之间的责任分配和通信。 这类模式通过改善系统内部的通信…

「后日谈」尼尔机械纪元

背景《尼尔:机械纪元》(NieR: Automata)基本上一款家喻户晓的游戏了, 本人也是正式打通了ABCDE, 其中时间跨度较长, 所以心态上有很大的改变. 在正式通关时大约游戏时长是 40小时 .总而言之, 该款游戏给我带来的感受, 音乐一流, 剧情优秀, 游戏性一般, 游戏体验较差. 本文虽然基本没有的剧透内容, 但是仍然包括游戏一部分内容, 可能对打算游玩的玩家会有些影响, 理性阅读 一周目抱着年轻时久仰大名的心态, 后续看到夏促早早的就直接收入囊中, 但是苦于时间问题, 一直没有认真的游玩下去, 所以是带有很大的心理期待的, 结果还没有降落就坠机了, 喜提一个结局, 结果从头开始. 可能有人会说, 是玩家实力不够, 新手关过不去啥啥的, 但实际上二周目在有芯片、有经验的前提下, 新手关无脑过, 其实就是教程内容不够优秀, 由于各种因素吧, 就搁置了一段时间. 但是突然再次听到 《Weight of t he …

「Unity」沙盒建造游戏设计(1) - 相机控制

前言在近期的公司项目中,需求项目开发一个类沙盒建造功能。我有幸负责项目中的关键部分,这一经历充满了挑战与收获。鉴于这个部分内容的丰富性和技术性,我决定将涉及相关设计以及本人的一部分思绪分成四期内容。本文是系列文章的第一期,将重点讨论建造期间的相机控制功能。 本篇主要包括四个相机部分内容 边界移动、单指拖拽 与 双指缩放 以及 状态控制 边界移动古法移动最近有几期需求都是跟相机移动相关的, 之前的做法还是让相机Follow一个对象, 给对象设置移动边界从而限制照相机不会穿帮 能够实现需求但是效果不是那么好, 因为要绑定透明对象, 并给对象设置边界范围要做一系列prefab操作,不够直观.而且因为要设置物理碰撞相关内容更新是在FixedUpdate中执行 即使是这样 如果相机在超过了Border范围的情况下, Follow对象没有设置对应的碰撞范围依然可以移动, 那么下次往相反的方向移动, 会先还原超过的距离, 再根据边缘移动相机…

「极客」Quest3与旁路由

起因作者3月的时候发了一下年终奖, 一年的辛劳, 最后的结果是3.5个月, 今年的环境不太好本应其实是4.5, 凭着不乱花的原则,但我依然想满足儿时的梦想, 于是买了一架电子琴 雅马哈P225.(-4.4K), 之前的小地方真的是放不下这个琴, 然后开始琢磨搬家的想法, 搬完家,东西也能够放下了,发现没有课程,买了本《哈农指法》, 结果发现都是五线谱, 啥都不会. 前阵子Apple Vision Pro 发布, 着实有种未来已来的感想, 查阅相关东西, 好巧不巧看到了Quest3. 起初也没有啥波澜, 但是又看到了Piano Vision, 完了心中就开始了泛滥. 于是下单购买一气呵成(-3.8k),起初没有旁路由需求的但是Quest需要全程魔法, 开始折腾,最后最后就有了这篇文章. 搭建方案经过调研, 本次全程魔法方案使用的是MacMini作为旁路由, 使用ClashX Pro和调整路由器的DHCP作为基本的实现方式 Cl…

「iOS」浅谈图片压缩

一、前言图片基本上是目前移动端无法逃避的内容 最基础的用户头像、相册、评论都有涉及 涉及到了前端与后端的交互 那么一定会考虑到图片压缩 本篇文章就是作者近期涉及到图片压缩所踩到的一些坑 二、一些基础知识所谓大小图片分为两个大小 分辨率大小 与 文件大小 通常文件大小与分辨率大小是有正相关关系的 分辨率高 * 分辨率宽 = 像素点数量 像素点的格式化方式、文件格式、压缩率 等等影响到 文件大小 而图片压缩的最终目的 就是 获取更小的图片文件大小 现实与里世界通常我们看到的某张图片是JPG(JPEG)/PNG/WEBP格式存在的 但他其实只是一种文件格式 在镜子后面与内存打交道的是图片的数据流 Android-BitMap iOS-NSData 其他大部分是 [Bit] 通常通过选择图片的路径后会得到一串图片的数据流 之后再去转换成某些图片的格式 呈现在手机上 在转换图片的期间可以选择的压缩率 但通常…

「iOS」震动与系统声音

iOS麦克风与系统声音起因背景产品需求游玩期间调用手动震动, Unity本内置振动的功能, 但效果太差, Android震动程度特别大, iOS没有震动, 就此提了一个需求编写原生iOS震动插件 过程那这个流程就涉及到两个内容, Unity调用原生及原生调用震动 原生代码比较简单 AudioServicesPlaySystemSound即可 Unity桥接也是用了网上比较大众流程的 Swift Package -> XCode -> Framework 的流程 这种方法只能在低版本的MacOS系统上执行 我本人用老电脑(Catalina)进行测试 但进入声网频道后调用无效果, 便展开了调研 自我怀疑由于新版本 generate-xcodeproj指令已被废弃, 加上传输文件并不方便, 就认为是个人Unity到iOS的桥接没有做好 于是用 Objective-C 通信 C 的方式进行处理, 但结果依然不行 深深的…

「iOS」浅谈Swift模型解析

一、背景介绍在移动应用开发领域,Android 和 iOS 构成了双分天下。 对于安卓开发者而言,Kotlin 可被视为 Java 的精神传承。Kotlin 在完全兼容 Java 的基础上,引入了众多现代语法和特性,从而使开发变得更为简洁高效。 然而,在 iOS 开发领域,情况略有不同。Swift 和 Objective-C 更像是逐渐演进的关系,前者在取代后者的过程中融合了传统与创新。 这种渐进替代的格局,使得新老两代开发思想之间产生了碰撞,对于 iOS 开发者而言,语言转变并非一帆风顺的过程。 二、发展历程在 iOS 开发中,Objective-C 的运行时特性起到了至关重要的作用,它允许动态派发消息、动态添加方法、交换方法实现等强大的功能。这为 Objective-C 带来了灵活性和可扩展性,但同时也带来了一些潜在的问题和复杂性。 然而,在 Swift 中,为了追求更高的性能和更严格的类型安全性,设计者选择了将运行时特性…

「iOS」关于CTMediator杂谈

一、组件化架构1.1 业界风向随着团队规模和应用版本的不断增长,项目的代码量也会不断膨胀,背负着越来越沉重的历史包袱。17、18年问题集中爆发了起来,在大厂号召下iOS开发领域掀起了一股“组件化”热潮。组件化是一种常见的应用架构设计,旨在提高代码的可重用性、可维护性和可扩展性,让并行开发更加高效。因此,越来越多的公司开始推行组件化架构,通过解耦和重组组件来提高开发效率。 美团平台与点评平台,自2015年底合并以来,为了共建和沉淀公共服务,减少重复造轮子,提升研发效率,着手组建化架构[^1] 2015年6月到年底,滴滴进行代号为 The One 的组件化框架开发,为了实现“代码治理”,可以“分而治之”的目标,在各个业务线各自开发的情况下防止代码大面积腐化,方便未来再做更加细致的架构重构,采用CocoaPods的方式进行拆分[^2] 京东的 iOS 客户端从 2011 年 2 月发布至今已历经 6 年 + 的时间,研发团队也从…