前言

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

这里有个学习小组 大家可以进去拿源码素材 视频教程 可以学习交流

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

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

1: 功能组件层

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

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

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

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

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

……

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

2: 行为策略层

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

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

3 操作决策层

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

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

Unity 游戏中的战斗系统的架构与设计相关推荐

  1. unity游戏中提示信息如何实现_《游戏设计模式》(游戏编程模式)全书笔记+Unity实现...

    Unity实现(Github地址): 笔记部分以下部分只包含笔记,具体实现及项目说明可查看Github 笔记中很多都是个人理解,目的是尽量让原本抽象的概念更易懂一些 关于书名--书名直译是<游戏 ...

  2. 利用OLAMI在unity游戏中加入中文语音控制(一)

    (欢迎转载.本文源地址:http://blog.csdn.net/speeds3/article/details/76209152) 最近打算尝试一下OLAMI在游戏中应用的可能性,这里做一下记录. ...

  3. unity游戏中提示信息如何实现_RPG游戏中的剧情在Unity3D中如何实现呢?

    原标题:RPG游戏中的剧情在Unity3D中如何实现呢? RPG游戏想必不用多介绍了,剧情系统是RPG游戏中必不可少的功能. 曾经听过一些朋友谈论:目前正在做一款RPG游戏,但是不知道如何实现RPG游 ...

  4. 在Unity游戏中使用Live2D

    转载文章,原文链接地址 什么是Live2D Live2D是日本Cybernoids公司开发. Live2D现阶段有两个主要的版本是2.1的版本和3.0的版本. 国内2.1版本用的比较多(ps.此为自己 ...

  5. unity游戏中的换装换色

    游戏中经常遇到给角色换装染色的需求,通过换装换色可以使的资源不增加的基础上在本来的衣服套数翻倍,策划可在这上挖坑,废话不多说,进入正题 主要分为两部分 1.换装 一个角色每个需要更换的部位都是一个单独 ...

  6. unity 游戏中的寻路与导航系统(5种寻路算法详解)

    @了解游戏中常见的寻路方式 通常来讲一般是根据建模方式来决定寻路方式 常见的寻路方式--建模方式 这里提供一下三种建模方式的示意图,如下 ,分别对应着,原图.Grid.WayPoint.NavMesh ...

  7. 简单的文本设计就能影响游戏体验?游戏中提升玩家体验的小设计

    除去少部分以"折磨"玩家为己任的"受苦"游戏,电子游戏其本质上还是为了给予使用者美好的体验. 除去游戏的画面.手感.音乐等等一些会直接影响玩家体验的重要要素, ...

  8. Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介

    约定 还记得上版本的第二十四篇的约定嘛?现在出来履行啦~ 为什么要重制? 之前写的专栏都是按照心情写的,在最初的时候笔者什么都不懂,而且文章的发布是按照很随性的一个顺序.结果就是说,大家都看完了,都还 ...

  9. unity游戏中提示信息如何实现_Unity编辑器操作面试题集锦(上)

    1.请描述游戏动画有几种,以及其原理. 答案:主要有关节动画.单一网格模型动画(关键帧动画).骨骼动画. 关节动画把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整 体的动画,角 ...

最新文章

  1. Linux系统适配苹果M1 芯片的项目有新进展
  2. Castle IOC容器快速入门
  3. python自学视频-python自学视频看这个就对了
  4. 浅谈问题生成(Question Generation)
  5. CM: webservice 元数据在word template中的存储
  6. 「数据分析」Sqlserver中的窗口函数的精彩应用之数据差距与数据岛(含答案)...
  7. javascript的阻止默认事件和阻止冒泡事件
  8. 穷的时候要记住这5点,才能有机会翻身
  9. java servlet 视频_Servlet开发的理论提升视频教程 - JavaWeb - Java - 私塾在线 - 只做精品视频课程服务...
  10. linux的dd命令与cp,dd命令中seek和skip的用法-Linux下挂载 windows 共享的命令-学习history命令的使用方法_169IT.COM...
  11. 如何使用MATLAB coder将MATLAB代码转换成C/C++语言(详细图文教程)
  12. ASP.net 密码加密和使用密码登录
  13. Nginx专题:nginx+tomcat实现动静分离
  14. DirSync: List of attributes that are synced by the Azure Active Directory Sync Tool
  15. vue导出excel加一个进度条_vue纯前端导出excel表格
  16. 计算机专业是朝阳还是夕阳?
  17. BZOJ 3470: Freda’s Walk
  18. 中国大学生数学竞赛(非数学专业类)竞赛大纲
  19. 电商支付平台支付安全保障措施
  20. 程序员要怎样学习英语?

热门文章

  1. 河南计算机程序大赛,中国高校计算机大赛——团体程序设计天梯赛河南大学获佳绩...
  2. c语言兵种管理系统,《帝国时代2:征服者》v1.0c多功能兵种修改器v1.5
  3. 4.架设邮件服务器-客户端软件的使用
  4. 元宇宙能成为下一个互联网吗?
  5. 高效实用文档管理工具
  6. java万年历设置闹钟_中华万年历APP设置闹钟及日程的具体操作方法
  7. 荣耀智慧屏 鸿蒙 安装第三方,荣耀智慧屏还不能安装第三方APP,潜在用户注意一下...
  8. 9月20号甲骨文学习总结
  9. 【Vue的双向数据绑定原理】
  10. 2021年焊工(技师)考试总结及焊工(技师)试题及答案