首页 > 其他分享 >Unity 游戏中的战斗系统的架构与设计

Unity 游戏中的战斗系统的架构与设计

时间:2024-01-18 09:55:05浏览次数:32  
标签:架构 策略 提供 Unity 具体 组件 操作 战斗 游戏

很多刚开始做游戏的小伙伴感觉战斗系统是一个比较麻烦的部分,不知道如何设计,角色很多,职业很多,技能有好几种,还有装备相关的东西。今天这篇文章详细的讲解一个战斗系统应该如何架构与设计,你看完并搞懂它,战斗系统的架构与设计对你来说再也没有难度了。首先我们先来上一张架构图:

 

如图,我们把整个的战斗系统分成了3个层次,分别为功能组件层, 策略层, 行为决策层。

我们的战斗系统将围绕这这3个层次参考设计,接下来我们具体的分析每一层是做什么的,哪些代码应该放到哪一层,如何实现。

 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

 

1: 功能组件层

 

功能组件层顾名思义就是实现某个具体功能的组件,如

角色移动组件: 控制角色的移动与行走;

动画状态机组件: 控制角色的状态与动画切换;

攻击伤害计算组件: 提供机制,按照技能的特性来提供计算伤害的时机与结束状态重置的时机,不提供具体的伤害计算的方法,只提供计算的机制;

寻路导航组件: 控制角色的寻路与行走;

……

这个层次的组件代码在不同游戏里面大部分都可以重用。总结一个点就是凡是战斗中属于角色的功能组件的就实现在这个层次,同时这个层次只提供机制,不提供具体的策略。什么叫提供机制不提供策略,举个具体的例子,比如导航组件,设计的时候就只要按照路径去走就可以了,具体路径是哪些,怎么来。它不关心。又如动画状态机组件,只提供功能,根据用户给的状态来播放正确的动画就可以了,不大去关心什么时候用什么状态,这个就是功能层的只提供机制不提供具体策略。

 

 

2: 行为策略层

看战斗的行为策略层如何设计之前先看下战斗单元,常见的战斗单元有:玩家, Boss, NPC,小怪等。每个战斗单元都会有自己的战斗策略,比如,攻击,行走等。在这一层,我们主要实现怪物角色的具体的一个战斗的策略,比如玩家具体实现攻击,技能的具体策略。比如敌人小怪,提供搜索玩家的策略(具体如何搜索),提供发起攻击的策略(具体如何攻击,每种攻击一种策略,并封装成接口),提供发起追击的策略(具体如何追击,封装成接口)。

我们可以把战斗单元做成一个基类,实现一些通用的策略,比如HP生命值, Attack攻击力, Define防御力, 数据配置表加载,防御力攻击力计算等。然后具体的战斗单元我们继承自这个基类,比如玩家Player, 怪物Boss, 小怪Monest等。这些战斗单元实现具体的各个策略,每个策略的数据就来自策划提供的数据配置表。

 

3 操作决策层

 

什么时候要追击,什么时候要攻击,什么时候放技能,这个就属于行为操作决策。一般常用的操作决策有玩家UI操作(单机), 网络事件操作, AI操作决策(单机或服务端上的AI决策),固定操作序列等。我们把决定用哪些策略来战斗放到到操作决策层。比如玩家有一个UI攻击操作,UI操作层就会调用玩家决策层接口来实现这个攻击,决策层,就会去找对应的目标,调用功能组件发起攻击。AI操作决策层,根据环境决定做什么,得到具体的操作,然后调用策略层的接口来实行具体的功能。

 

今天给大家分享了战斗的三层设计,我结合这个设计也做了一个视频教程《Unity如何架构设计战斗系统》与战斗代码demo,可以进小组领取 方便大家具体学习与实践。

 

标签:架构,策略,提供,Unity,具体,组件,操作,战斗,游戏
From: https://www.cnblogs.com/bycw/p/17971840

相关文章

  • Android平台Unity下如何通过WebCamTexture采集摄像头数据并推送至RTMP服务器或轻量级R
    技术背景我们在对接Unity下推送模块的时候,遇到这样的技术诉求,开发者希望在Android的Unity场景下,获取到前后摄像头的数据,并投递到RTMP服务器,实现低延迟的数据采集处理。在此之前,我们已经有了非常成熟的RTMP推送模块,也实现了Android平台Unity环境下的Camera场景采集,针对这个技术需求,......
  • IGC的底层核心结构Transformer是如何彻底改变NLP游戏规则的?OJAC近屿智能带你一探究竟
    没有Transformer,就没有NLP的突破,听起来有些夸张,但事实确实如此。什么是Transformer?Transformer是一种基于注意力机制的神经网络架构。可以用于处理序列数据,被广泛应用于翻译、识别等任务。这种模型的主要特点是使用自注意力机制和位置Embedding来提升语言的表达能力。Transformer模......
  • 最新Unity DOTS Instancing合批:如何针对单个渲染实体修改材质参数
    最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去的动画时间。但是在做大规模战斗控制的时候,有10000+的小兵在战斗......
  • Unity3D 游戏服务端哪些模块可以做成无状态详解
    Unity3D游戏服务端是指在使用Unity3D引擎开发的游戏中,负责处理与游戏客户端的通信以及游戏逻辑的服务器端。在设计游戏服务端时,有一种常见的设计模式叫做无状态模式。本文将详细介绍Unity3D游戏服务端哪些模块可以做成无状态,并给出技术详解和代码实现。对啦!这里有个游戏开发交流......
  • Unity3D 在游戏引擎中常用的光照模型有哪些现详解
    Unity3D是一款强大的游戏引擎,其在游戏开发中广泛应用于各种类型的游戏。光照模型是游戏引擎中一个重要的组成部分,它决定了游戏中的光照效果和物体的视觉效果。在Unity3D中,常用的光照模型有Lambert光照模型、Blinn-Phong光照模型和PBR(PhysicallyBasedRendering)光照模型。对啦!这......
  • [疑问] 为什么 Apple Silicon 处理器 MacBook 自带的 zsh 是 x86 架构的?
    问题如题,我有一台MacBookPro2021,某天我突发奇想测试了一下机器自带zsh的架构,输出的结果令人震惊:至于为什么不是ARM架构的,目前不得而知。不过我已经使用Homebrew装上了ARM架构的zsh。解决将默认Shell切换为Homebrew安装的zsh由于Homebrew安装的zsh不在......
  • 苏宁OLAP架构设计
    一.功能综述OLAP引擎为存储和计算二合一的引擎,自身内部涵盖了对数据的管理以及提供查询能力。底层数据完全规划在引擎内部,外部系统不允许直接操作底层数据,而是需要通过暴露出来的接口来读写引擎内部数据。目前整体来说OLAP功能由两部分组成:数据管理,查询引擎。1.1数据管理引......
  • 使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:第十五章到第十八章
    十五、反转棋游戏原文:inventwithpython.com/invent4thed/chapter15.html译者:飞龙协议:CCBY-NC-SA4.0在本章中,我们将制作反转棋,也称为黑白棋或奥赛罗。这个双人棋盘游戏是在网格上进行的,因此我们将使用带有x和y坐标的笛卡尔坐标系。我们的游戏版本将具有比第10章中的......
  • 使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:第十九章到第二十一章
    十九、碰撞检测原文:inventwithpython.com/invent4thed/chapter19.html译者:飞龙协议:CCBY-NC-SA4.0碰撞检测涉及确定屏幕上的两个物体何时相互接触(即发生碰撞)。碰撞检测对于游戏非常有用。例如,如果玩家触碰到敌人,他们可能会失去生命值。或者如果玩家触碰到硬币,他们应该自动......
  • 使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:第五章到第九章
    五、龙之境原文:inventwithpython.com/invent4thed/chapter5.html译者:飞龙协议:CCBY-NC-SA4.0本章中您将创建的游戏名为龙之境。玩家需要在两个洞穴之间做出选择,这两个洞穴分别藏有宝藏和一定的厄运。如何玩龙之境在这个游戏中,玩家身处一个充满龙的土地。这些龙都住在洞......