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

Unity 战斗系统的架构与设计

时间:2023-10-20 14:44:38浏览次数: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/17777076.html

相关文章

  • untiy小游戏——牧师与魔鬼_MVC架构
    牧师与魔鬼_MVC架构游戏介绍​牧师和魔鬼是一款益智游戏,您将在其中帮助牧师和魔鬼过河。河的一侧有3个祭司和3个魔鬼。他们都想去这条河的另一边,但只有一条船,这条船每次只能载两个人。而且必须有一个人将船从一侧驾驶到另一侧。您可以单击按钮来移动它们,然后单击移动按......
  • 《动手学深度学习 Pytorch版》 9.6 编码器-解码器架构
    为了处理这种长度可变的输入和输出,可以设计一个包含两个主要组件的编码器-解码器(encoder-decoder)架构:编码器(encoder):它接受一个长度可变的序列作为输入,并将其转换为具有固定形状的编码状态。解码器(decoder):它将固定形状的编码状态映射到长度可变的序列。9.6.1编码器编......
  • 花生好车基于 KubeSphere 的微服务架构实践
    公司简介花生好车成立于2015年6月,致力于打造下沉市场汽车出行解决方案第一品牌。通过自建直营渠道,瞄准下沉市场,现形成以直租、批售、回租、新能源汽车零售,四大业务为核心驱动力的汽车新零售平台,目前拥有门店600余家,覆盖400余座城市,共设有25个中心仓库。目前已为超40万......
  • 花生好车基于 KubeSphere 的微服务架构实践
    公司简介花生好车成立于2015年6月,致力于打造下沉市场汽车出行解决方案第一品牌。通过自建直营渠道,瞄准下沉市场,现形成以直租、批售、回租、新能源汽车零售,四大业务为核心驱动力的汽车新零售平台,目前拥有门店600余家,覆盖400余座城市,共设有25个中心仓库。目前已为超40......
  • Spring Cloud微服务架构:实现分布式系统的无缝协作
    文章目录1.什么是微服务架构?2.SpringCloud简介3.使用SpringCloud构建微服务3.1创建SpringBoot应用程序3.2添加SpringCloud依赖3.3配置应用程序3.4创建REST端点3.5连接各个服务3.6启动Eureka服务器4.构建分布式系统4.1服务注册与发现4.2负载均衡4.3配置管理4.4断......
  • 软考系列(系统架构师)- 2018年系统架构师软考案例分析考点
    试题一软件架构(非功能性需求、C/S架构)【问题1】(8分)在系统架构设计中,决定系统架构设计的非功能性需求主要有四类:操作性需求、性能需求、安全性需求和文化需求。请简要说明四类需求的含义。(1)操作性需求:指系统完成任务所需的操作环境要求及如何满足系统将来可能的需求变更的......
  • 第九章、web前端架构师
    目录十八、编辑器组件图层面板功能开发1、前言十八、编辑器组件图层面板功能开发1、前言*引言-......
  • 开源游戏 | 一款采用 Java开发的基于小孔成像原理与图形光栅化的字符 3D 画面框架构建
     去关注、不迷路一、项目概述       这是一款采用JavaSwing开发的基于小孔成像原理与图形光栅化的字符3D画面框架构建的空战游戏,简单说就是作者为了做个3D字符空战游戏,顺手写了个3D引擎,别人的本科毕设。注:dogfight为军事用语,是指战机近距离接战缠斗,可直接......
  • unity如何检测是否联网
    有些程序要求必须联网才可以运行。如何在unity中进行检测当前运行程序的环境是否连接到网络?新建一个场景,先在log里来显示内容。将脚本ChinarWeb挂载到相机上。下面是脚本内容:usingUnityEngine;usingSystem.Net.NetworkInformation;usingSystem.Runtime.InteropServices;us......
  • 10月19日简单的cs架构软件编写
    目录简单的cs架构软件编写首先创建两个文件然后就是客户端的步骤简单的cs架构软件编写首先创建两个文件如图这里两个文件都需要使用到socket这个模块首先是通信服务器的编写第一步导入socket这个模块第二步创建一个socket对象soc,它表示服务器的主要通信端口。第三步用soc......