tang-xiaolong / CommandPatternInUnity

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Command Pattern

  周末学习了命令模式,发现比较适用于通过参数按队列处理一系列事情,同时也很方便做撤销操作与日志存储。通过日志,我们也可以还原操作。

  以前写过一个摆放物体的游戏,里面也有放置、删除、旋转等一系列操作,所以想着重写一下这个操作,便有了这个仓库,目前实现了放置和删除,撤销与反撤销。后续有空再把旋转和日志还原加上。

  本项目参考了Board To Bits GamesDesign Patterns in Unity,不过他的教程里只讲了放置和撤销,而我需要更多操作,比如删除、旋转等等。因此我补上了删除命令,并让它正常工作了。

  在操作的过程中,屏幕上会显示命令的历史记录,并使用一个index记录当前是哪个命令执行完的状态。如果撤销,则会改变index,而历史记录不会被修改。因为我们在反撤销的时候需要依赖历史记录。

  大部分的时候,命令的执行和撤销,是相反的操作,创建-->删除、删除-->创建、旋转-->反向旋转、移动-->反向移动、缩放-->反向缩放。

  由于部分命令会改表原来的命令影响的实体,因此我引入了一个命令黑板,来记录某个物体受哪些命令影响,某些命令在修改了物体后会同步到黑板,使得关心原来物体的命令可以修改关心对象为新对象。比如命令一是创建命令,创建了方块A,命令二是删除命令,删除了原始方块A。现在如果撤销这个命令,会重新创建一个方块代替原始方块A,此时创建老方块的命令一需要修改关心的对象,变成关心新创建的方块,这样如果继续撤销,命令一可以通过关心的对象把新方块也删除。具体细节可以看代码,等后续我完善了我会写一篇文章介绍细节和设计。

目前操作方式:

  • 放置:鼠标左键
  • 删除:左Ctrl键加鼠标左键
  • 撤销:Z
  • 反撤销:Y

About


Languages

Language:C# 100.0%