3D沙盒游戏StrangerLand开发日志
文章平均质量分 86
个人3D沙盒游戏StrangerLand开发日志
NNNNNxs
tencent游戏客户端开发
展开
-
3D沙盒游戏开发日志10——设计世界中所有物体的工作方式
日志回顾之前的内容基本都是在处理和人物相关的事情,现在是时候放眼全局来考虑整个游戏世界的物体是如何工作的以及他们之间是如何交互的,这个部分涉及到的内容很多,有很多都值得单独分析,所以这篇只记录整体的设计思路,至于其中的具体部分会在接下来的日志中会逐个分析,先了解整体规划后就更容易明白在每个部分中的一些细节处理的原因代码结构这个图描绘了整个世界的中生物的工作方式,我将从这张图中逐个分析,至于非生物(物体)的工作方式我也会简单介绍因为它们也是设计中的重要考虑部分现状和期望世界中的生物分为两类,原创 2022-02-23 23:45:40 · 1919 阅读 · 0 评论 -
3D沙盒游戏开发日志12——Prefab和GameComponent
日志本篇将详细讲解第10篇日志中的Prefab与GameComponent部分(一定要先看第10篇)如果说上一篇决策层的Brain和EventController是适用于其它生物和人物的话,那么本篇的Prefab和GameComponent就适用于整个游戏世界中所有物体(一颗树,一个斧头,一头狼,以及玩家角色)。这也是为什么角色和其它生物的决策层和动画层都要依靠GameComponent来实现功能,将整个游戏中的功能性代码与数据都集中在GameComponent中,模糊了生物与非生物的界限,也大大提高原创 2022-02-26 11:44:05 · 2671 阅读 · 0 评论 -
3D沙盒游戏开发日志11——决策层设计(行为树与优先级)
日志本篇来详细讨论上篇中所简单介绍的决策层(一定要先看上一篇)为了方便观看,也把上篇的框架图贴过来之前已经说过在决策层上玩家和其它生物是由区别的,玩家使用的是简单的优先级决策EventController,其他生物使用的是复杂的行为树系统,玩家添加决策层只是为了结构上的对应,所以我将主要分析的是决策树部分。决策树也称行为树,实际上也不一定要用在决策层,用在动画层也是可以的,可以理解为加强版的状态机,它就是为了解决复杂的AI使用状态机会造成非常复杂的状态图而设计出来的,与以往一样我不会讲概念上的原创 2022-02-24 19:52:11 · 4458 阅读 · 0 评论 -
3D沙盒游戏开发日志2——网格和建筑物放置系统
日志沙盒游戏的灵魂当然是足够高的建筑自由度来打造自己的世界,所以我就先来制作一个初级的建筑系统。观察各个沙盒游戏(饥荒,我的世界)等,他们的建筑物放置都是以网格为单位的而不是精确的浮点数坐标,我想原因无非是节省内存上的开销并且给玩家提供更好的游戏理解(只需要记住几格就好),所以在制作建造系统前需要先制作网格世界网格首先思考哪些物品是以网格为坐标单位的,人物的移动肯定不是,我们自己建造的建筑和地图生成的建筑物肯定是,游戏中的某些生物也是以网格为单位表现行为的,还有我们生成世界时也是以网格为单位原创 2021-09-06 17:18:50 · 2232 阅读 · 3 评论 -
3D沙盒游戏开发日志9——寻路模块优化附带网格建筑系统修改
日志之前实现了一个简单的寻路模块PathFinder,但它的所有部分都很粗糙,只是将A*算法转变成为实际,现在我已经完成了游戏主体的大部分,是时候着手改造它使它变得更精确和高效了。改造它的同时自然也就顺带优化了相关的MapManager和Building系统优化策略一. 用精确坐标+实际碰撞体代替网格坐标+网格大小旧方案之前的PathFinder和MapManager中,几乎一切都是使用网格坐标(整数)计算的,使用的是GridPos+模型长宽多少个Grid这样的方案去确定需要检测的网格这原创 2022-02-14 19:12:04 · 907 阅读 · 0 评论 -
3D沙盒游戏开发日志4——网格寻路系统
日志 这篇我们要来实现网格游戏中最普遍也是最重要的算法基础——寻路算法,如果你只想使用寻路算法,可以直接使用Unity提供的Navmeshagent和AI命名空间下的工具,不过因为这个项目尽可能不适用插件,并且我希望寻路算法更贴近我的项目,尽可能更高效和可定制化,所以来自己实现一个A*寻路算法在这里我不会写A星寻路算法的原理,网上有很多A星寻路的实现,我只会写我在把他运用到我的实际项目中遇到了哪些问题,做了哪些改进和定制化,在最后会贴上寻路代码从c++到c#在这个项目之前我已经学习过A寻路算原创 2021-09-16 20:59:28 · 416 阅读 · 0 评论 -
3D沙盒游戏开发日志8——系统化的人物功能模块(3)
日志此篇为人物action系统的最后一篇,挑选了所有action中最经典的CraftController来展示ActionController系统的魅力CraftControllerCraftController主要负责的是人物的捡起动作以及采集和工作(伐木,挖矿等),至于为什么要把这些动作全都放在一个Action中,原因主要是他们都是通过相同的输入触发的,按下键后根据手上是否装备了对应的工具以及可操作对象的远近来选择具体进行哪个动作,这些判断显然放在一个action内比放在inputcontro原创 2022-01-18 22:35:56 · 1808 阅读 · 0 评论 -
3D沙盒游戏开发日志1——制作一个有探索感的第三人称视角
前言背景 学习unity以及其他相关内容(游戏服务器,lua,shader等)已经有一年的时间了,并且c++算法水平也在这一年里有所提升,决定是时候耐心的做一款合格的游戏来总结和提炼自己了,因为只有课余时间并且目前只有我一个人,所以项目的开发预计会持续至少4个月以上,目标就是能把游戏发到steam上(毕竟以前做的游戏都只有发给朋友玩) 这个项目的所有代码,shader甚至部分美术我都会尽可能的从头做,不会引用一些以前的老代码或者现成的插件,并且会尽可能的保证代码的规范性和清晰的注释,这个日志原创 2021-09-03 22:18:51 · 1506 阅读 · 0 评论 -
3D沙盒游戏开发日志3——饥荒风格的战斗第三人称控制器
日志 好多天没写日志了,其实最近做了很多东西,只是一直懒得记录而已,所以这两天先把前面的日志补完再继续开发好了,值得一提的是最近又找到了几款合适的资源,日子真是越来越有盼头了^_^ 之前在第一次的时候我们制作了一个探索风格的第三人称视角,但沙盒游戏中更多的时候是战斗,所以我们需要开发一个一般状态的操控器,之前的那个可以留在一些特定的场合使用。在战斗方面我觉得饥荒给我的感觉最舒服,所以我决定模仿饥荒的人物操控来制作。我们依然是在之前的两个脚本LocomotionController和Vie原创 2021-09-16 20:00:39 · 596 阅读 · 0 评论 -
3D沙盒游戏开发日志7——系统化的人物功能模块(2)
日志此篇主要是将ActionController应用到之前已经写过的LocomotionController、ConstructController并做适当修改,本篇代码部分将只记录与之前不同的修改LocomotionController实际上LocomotionController是所有Action中最特别的一个,回顾之前写的内容,主要有两类移动一类是鼠标点击后自动进行寻路的协程移动,这类移动和其它行为一样只需要一次或者很少次数的输入并且可以被打断。另一类是通过键盘的输入,显然这类输入是频繁并且原创 2022-01-10 00:28:56 · 1886 阅读 · 0 评论 -
3D沙盒游戏开发日志5——人物的基本攻击与鼠标事件监测
日志 是时候用我们写的PathFinder做一些很酷的事了,首先我们来拓展一下人物的移动,之前已经完成了使用键盘实现自由的移动,现在我们再来写一个常见的用鼠标实现智能寻路移动。MouseController人物要监听很多有关鼠标的操作,不只是点击地面移动,还有点击敌人、点击拾取物品,以及当鼠标放在某物体上时可能需要有特殊的效果(高亮显示等),所以我们创建一个单独的controller来负责和鼠标相关的输入控制。void FixedUpdate(){ Ray ray = viewContro原创 2021-09-25 00:00:19 · 211 阅读 · 0 评论 -
3D沙盒游戏开发日志6——系统化的人物功能模块
日志终于放假了,这两天会把前面做的东西没写的日志都补上(大概3-5篇),然后恢复正常三天一更前言之前写了几个功能像人物的移动及视角控制、攻击、建筑物放置,接下来还会有背包,以及人物的各种行为如吃东西,捡起东西丢东西等包括与环境物体和怪物的交互,并且攻击等行为都会和背包里的装备情况联系起来。但当我去做这些的时候尤其是人物的各种动作,我意识到有必要写一个系统化的人物控制器来协调人物各个模块之间的关系了,之前我们只有建筑物放置和攻击会调用移动模块,关系很简单也不用担心耦合问题。但接下来人物的动作会有原创 2022-01-04 17:11:39 · 2565 阅读 · 0 评论