首页开始场景

初始场景内共有三个脚本

通过Button挂载调用事件

实际上Button都是自带一个事件处理器的, 你可以指定一个脚本的一个方法作为点击事件, 这里用作了显示Controls UI

Cursor类

这个用于指定鼠标样式,和时候锁定鼠标, 其中Start里面进行了解锁鼠标,并设置为了可见.

EventSystem.current.currentSelectedGameObject 可以获取或者赋予选中哪一个UI, 此时被用作选中开始按钮

之后点击按钮开始游戏.

这里判断点击用的是 Submit 字符串.

场景跳转解析

进入Main场景, 这里有很多的预制体和脚本, 我们还是按照教程来进行解析.

查看GameFlowManager脚本

Update中循环检测是否完成全部目标或Player死亡.
之后进入EndGame中.

  1. 显示并且解锁鼠标.
  2. 之后设置游戏结束状态为True.
  3. 打开结束画布
  4. 判断胜负
    1. 胜利
      1. 设置结束场景为Win场景
      2. 结束时间为当前时间+3f+4f
      3. Add一个AudioSource播放VictorySound音效,并设置到一个混音组.
      4. 设置延迟播放2f
      5. 生成一个带有Msg的预制体,并设置销毁时间2f,移动其到列表底部
      6. Msg等待时间后, 生成自带的MsgPrefab,并传入m_DisplayMessageManager的TransForm
      7. 最后实际上就是显示了一个消息UI, 缓慢显示动画
      8. 之后回到结束选项, 此时还需要处理当前屏幕透明度, 声音缓慢消失, 到时间之后直接跳转场景
    2. 失败
      1. 设置场景名为Lose场景
      2. 设置结束时间为当前时间+3f

003装饰模式

装饰模式

装饰模式是声明一个包含主体的抽象类, 其接受一个自己, 并以主体作为构造函数.
这样就可以在主体不知情时扩展主体行为.

  • Component为统一接口,也是装饰类和被装饰类的基本类型

  • ConcreteComponent为具体实现类,也是被装饰类,他本身是个具有一些功能的完整的类。

  • Decorator是装饰类,实现了Component接口的同时还在内部维护了一个ConcreteComponent的实例,并可以通过构造函数初始化。而Decorator本身,通常采用默认实现,他的存在仅仅是一个声明:我要生产出一些用于装饰的子类了。而其子类才是赋有具体装饰效果的装饰产品类。

  • ConcreteDecorator是具体的装饰产品类,每一种装饰产品都具有特定的装饰效果。可以通过构造器声明装饰哪种类型的ConcreteComponent,从而对其进行装饰。

Read More

CSharp序列化快速加载配置

CSharp序列化快速加载配置

这次不是搬运, 是我在公司做存储配置和解析配置的是否突然想到C#好像有序列化的东西.
于是了解了一番.

使用C#自带的序列化, 能让你不必编写繁琐的配置解析代码, 直接使用api将类存储为文件, 之后也可以反序列化将文件变为类. 主要用于数据的存储.

除了解析配置, 还有其他使用清空请自行探索

参考

Read More