0
点赞
收藏
分享

微信扫一扫

【Unity项目实践】游戏架构-表现和数据分离

课程链接:​​https://learn.u3d.cn/tutorial/framework_design_trail#611a4b9d7c7ccd001f70ab97​​

泛型事件

在昨天的笔记中,我们用两个事件来实现了事件的触发,我们可以看到这两个事件的方法都是一样的,只有名字不一样,就其结构来说是有冗余的,所以我们用泛型+继承来进行改善。

新建一个Event类型的脚本,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class Event<T> where T : Event<T>//继承自己,这里涉及到泛型和泛型约束的知识点
{
private static Action mOnEventTrigger;

public static void Register(Action onEvent)
{
mOnEventTrigger += onEvent;
}

public static void UnRegister(Action onEvent)
{
mOnEventTrigger += onEvent;
}

public static void Trigger()
{
mOnEventTrigger?.Invoke();
}
}

写完之后我们需要到两个事件脚本中去继承,但是静态类是不能继承的,所以需要把static修饰符去掉,然后把里面包含的方法都去掉,具体改动点如下:

-删掉静态修饰符

-继承泛型

-删除里面包含的方法

用泛型Event代替两个Event之后的架构如下图所示:

【Unity项目实践】游戏架构-表现和数据分离_架构


数据和表现分离

常见的开发机构是MVC架构,我们先用Model进行改造,新建一个名为GameModel的脚本,然后我们将其简化以下称为以下的架构图:

【Unity项目实践】游戏架构-表现和数据分离_泛型_02

这里还存在一个问题:游戏结束的条件不应该在enemy的脚本中去判断,我们希望game节点可以判断这个逻辑,这里需要由子节点enemy向Game父节点进行通信。

新建一个事件用来监听是否有敌人被消灭,在enemy中进行调用,在Game中进行监听。现在就做到了数据和表现分离、单一职责原则。

【Unity项目实践】游戏架构-表现和数据分离_泛型_03


总结:通常来说,我们使用事件的时候需要涉及到三个部分,一个event脚本,一个发布脚本,一个订阅脚本。


MVC

交互逻辑 & 表现逻辑

以下伪代码展示了表现逻辑和交互逻辑的区别

交互:输入、操作

表现:展现数据

很多时候MVC架构不会被完整应用,一般只需要用表现(View)和数据(Model)分离即可。

一般view和modal难以区分或者单独再写一个脚本比较浪费的时候就用Controller。

【Unity项目实践】游戏架构-表现和数据分离_数据_04

【Unity项目实践】游戏架构-表现和数据分离_架构_05

举报

相关推荐

0 条评论