服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - Unity游戏开发中的设计模式之策略模式

Unity游戏开发中的设计模式之策略模式

2023-05-06 15:15iukam C/C++

策略模式是Unity游戏开发中常用的设计模式之一,用于封装一系列算法或行为,并使这些算法或行为可以相互替换。通过策略模式,可以在运行时动态地选择算法或行为,实现游戏中的多样性和可扩展性。常见的应用包括AI行为、武

一、使用策略模式的原因

在设计游戏角色伤害时,因角色差异而使用不同的计算公式,如何解决,同一计算方式分布在不同的角色中、新增角色增加维护等问题,可以使用策略模式解决。

二、策略模式的定义

GoF对策略模式的解释:定义一组算法,并封装每个算法,让它们可以彼此交换使用。策略模式让这些算法在客户端使用它们时能更加独立。

策略模式在处理所谓的“算法时”,着重于细节,至于计算方式及规则,则不用去理会。

三、策略模式的使用说明

Unity游戏开发中的设计模式之策略模式

参与者说明:

  • Strategy(策略接口类):提供“策略客户端”可以使用的方法。
  • ConcreteStrategyA~C(策略实现类): 不同算法的实现。
  • Context(策略客户端):拥有一个Strategy类的对象引用,并且通过对象引用获取想要的计算结果。

四、策略模式的实现范例

算法的共享接口:

?
1
2
3
4
5
6
7
/// <summary>
/// 算法的共享接口
/// </summary>
public abstract class Strategy
{
    public abstract void AlgorithmInterface();
}

实现各种算法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*  各类算法的实现 */
 /// <summary>
 /// 算法 A
 /// </summary>
 public class ConcreteStrategyA : Strategy
 {
     public override void AlgorithmInterface()
     {
         //print
     }
 }
 /// <summary>
 /// 算法 B
 /// </summary>
 public class ConcreteStrategyB : Strategy
 {
     public override void AlgorithmInterface()
     {
         //print
     }
 }
 /// <summary>
 /// 算法 C
 /// </summary>
 public class ConcreteStrategyC : Strategy
 {
     public override void AlgorithmInterface()
     {
         //print
     }
 }

拥有Strategy对象的客户端

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/// <summary>
    /// 拥有Strategy 对象的客户端
    /// </summary>
    public class Context
    {
        Strategy strategy = null;
        /// <summary>
        /// 设置算法
        /// </summary>
        /// <param name="strategy"></param>
        public void SetStrategy(Strategy strategy)
        {
            strategy = strategy;
        }
        /// <summary>
        ///执行当前的算法
        /// </summary>
        public void ContextInterface()
        {
            strategy.AlgorithmInterface();
        }
    }

五、中介者模式的优点和注意事项

优点:

  • 让角色属性变得好维护;
  • 不必在针对角色类型编写程序代码;
  • 计算公式的替换更为方便;

缺点:

计算公式时的参数设置,需要外界提供相关信息作为计算依据;

与状态模式的差别:

Unity游戏开发中的设计模式之策略模式

都归类在行为模式(Behavior Patterns)分类下,都由一个Context类来维护对象的引用。

  • 差异: State是在一群状态中进行切换,状态之间有对应和连接的关系,而Strategy是由一群没有任何关系的类组成,不知彼此的存在。
  • State受限于状态机的切换规则,在设计初期就可能定义所有状态,后期追加,不是想加入就加入,受限于现有状态关联;而Strategy是由封装计算算法而形成的一种设计模式,算法之间不存在任何依赖关系,可以随时加入。

六、策略模式的总结

将复杂的计算公式从客户端中独立出来称为一个群组,之后客户端可以按照情况来决定使用的计算公式策略,既提高系统应用的灵活程度,也强化了系统中对所有计算策略的维护方式。

后续开发人员很容易找到相关计算公式的差异,同时修改点也会缩小到计算公式本身,也不会影响到使用的客户端。

到此这篇关于Unity游戏开发中的设计模式之策略模式的文章就介绍到这了,更多相关Unity策略模式内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_40120946/article/details/122530981

延伸 · 阅读

精彩推荐
  • C/C++C语言数据结构之二分法查找详解

    C语言数据结构之二分法查找详解

    二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时...

    诚挚的乔治4562022-09-19
  • C/C++C++实现随机生成迷宫地牢

    C++实现随机生成迷宫地牢

    这篇文章主要介绍了C++实现随机生成迷宫地牢的相关资料及代码分享,推荐给大家,有需要的小伙伴可以参考下。 ...

    C++教程网7072021-02-24
  • C/C++C语言之快速排序案例详解

    C语言之快速排序案例详解

    这篇文章主要介绍了C语言之快速排序案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    小尹同学11342021-12-07
  • C/C++解读C++编程中派生类的构成和创建

    解读C++编程中派生类的构成和创建

    这篇文章主要介绍了解读C++编程中派生类的构成和创建,是C++入门学习中的基础知识,需要的朋友可以参考下...

    C++教程网7222021-03-14
  • C/C++C++输入流和输出流 超级详细

    C++输入流和输出流 超级详细

    C++ 的开发者认为数据输入和输出的过程也是数据传输的过程,数据像水一样从一个地方流动到另一个地方,所以 C++ 中将此过程称为“流”,实现此过程的...

    编程帮4162022-01-12
  • C/C++一篇文章带你了解C语言的文件操作

    一篇文章带你了解C语言的文件操作

    这篇文章主要为大家详细介绍了C语言的文件操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带...

    独爱小y11322022-09-27
  • C/C++解决C++全局变量只能初始化不能赋值的问题

    解决C++全局变量只能初始化不能赋值的问题

    今天小编就为大家分享一篇解决C++全局变量只能初始化不能赋值的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    柳婼6422021-06-30
  • C/C++c++线程池实现方法

    c++线程池实现方法

    这篇文章主要介绍了c++线程池实现方法,实例分析了C++线程池的原理与相关实现技巧,需要的朋友可以参考下...

    liujian06167772021-02-28