统一中有哪些常用的命令模式

  介绍

这篇文章将为大家详细讲解有关统一中有哪些常用的命令模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

命令模式,主要成员有提出要求的客户,设置命令的收集者,执行命令的接收者。客户要求很简单,点击按扭就要实现一项目具体的效果,设置命令的收集者无需要知道命令如何执行,只需要为执行者做好配制。用命令的执行者将执行一个方法,所有的命令者是继承于有这个方法的接口的类。

抽象到程序代码中,这三类成员分别对应于界面上的用户,远程控制(这里是随便命名的),RemoteLoader

统一中有哪些常用的命令模式

先制作如上的界面,方便你比较直观的认识,其中左边两个是用于切换选择不同的命令。下面第一个按扭可以执行选中的命令,第二个按扭可以进行撤销操作。

程序,UGUI面局如下,在帆布下分别设置了执行者和配制者。

统一中有哪些常用的命令模式

制作好界面之后就可以来实现具体的脚本编辑了,分别创建好接口ICommand,配制脚本RemoteLoader和执行脚本无线遥控,结构如下:

统一中有哪些常用的命令模式

在指令中,分别编写了用于移动,旋转,颜色,文字的脚本

统一中有哪些常用的命令模式

这样一来,就可以实现一个可撤销的命令模式了,效果如下所示:

统一中有哪些常用的命令模式

其中用于保存撤销方法和具体怎么撤销都是使用栈来实现的,下面分别是部分代码实现:

<强>一、接口

public  interface  ICommand   {   void 才能执行();   void 才能撤销();   }

<强>二,执行器

public  class  RemoteControl :, MonoBehaviour  {   public 才能;Button  ctrlBtn;   public 才能;Button  undoBtn;   public 才能;Text  ctrlName;   private 才能;ICommand  icommand;      public 才能;Stack< UnityAction>, undoFunctions =, new  Stack ();      void 才能清醒(){   ,,,ctrlBtn.onClick.AddListener (OnCtrlBtnClicked);   ,,,undoBtn.onClick.AddListener (OnUnDoBtnClicked);   ,,}   ,,   public 才能;void  SetText (string  textinfo)   {才能   ,,,ctrlName.text =, textinfo;   ,,}      public 才能;void  SetCommond (ICommand  icommand)   {才能   ,,,this.icommand =, icommand;   ,,}///才能,& lt; summary>///才能,执行///才能,& lt;/summary>   public 才能;void  OnCtrlBtnClicked ()   {才能   ,,,if  (icommand  !=, null)   ,,,{   ,,,,,icommand.Execute ();   ,,,,,undoFunctions.Push (icommand.UnDo);   ,,,}   ,,}///才能,& lt; summary>///才能,撤销///才能,& lt;/summary>   private 才能;void  OnUnDoBtnClicked ()   {才能   ,,,if  (undoFunctions.Count 祝辞,0)   ,,,{   ,,,,,undoFunctions.Pop () .Invoke ();   ,,,}   ,,}   }

<强>三,配制加载器

public  class  RemoteLoader : MonoBehaviour   {   public 才能;Button  lastBtn;   public 才能;Button  nextBtn;      private 才能;int 指数;   private 才能const  int  NUM_COMMAND =, 10;   private 才能ICommand[],命令;   private 才能,string [], textinfos;      private 才能;MoveCommand  movexCmd;   private 才能;MoveCommand  moveyCmd;   private 才能;MoveCommand  movezCmd;   private 才能;RotateCommand  rotxCmd;   private 才能;RotateCommand  rotyCmd;   private 才能;RotateCommand  rotzCmd;   private 才能;ColorChangeCommand  redColorCmd;   private 才能;ColorChangeCommand  greenColorCmd;   private 才能;ColorChangeCommand  blueColorCmd;   private 才能;TextChangeCommand  textCmd;      private 才能,string [], infos =, {,“A",“B",,“C",,“D",,“E",,“F",};   public 才能;RemoteControl  remoteCtrl;      public 才能GameObject 多维数据集;      void 才能清醒()   {才能   ,,,lastBtn.onClick.AddListener (OnLastBtnClicked);   ,,,nextBtn.onClick.AddListener (OnNextBtnClicked);   ,,}      void 才能开始()   {才能   ,,,commands =, new  ICommand [NUM_COMMAND];   ,,,textinfos =, new 字符串(NUM_COMMAND);      ,,,textinfos [0],=,“x方向移动“;   ,,,命令[0],=,new  MoveCommand (Vector3.right cube.transform也);   ,,,textinfos [1],=,“y方向移动“;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

统一中有哪些常用的命令模式