0
点赞
收藏
分享

微信扫一扫

【Unity项目实践】游戏架构

这次的笔记是看了凉鞋的课程做的课堂笔记,课程链接如下:​​https://learn.u3d.cn/tutorial/framework_design_trail#611a49ebacab1e002045f5c4​​


基本的游戏流程

要实现的功能

开始主菜单点击开始游戏

点击中物体之后跳转到游戏通关页面


项目实现

游戏中的对象:

Panel:

GameStart

GamePass

Enemy


变量赋值:

给游戏开始的按钮添加两个事件:点击之后GameStart的panel的isActive为false,Enemy的isActive为true;


游戏脚本:

//点击之后物体销毁

public GameObject GamePassPanel;//在Inspector窗口中进行赋值即可
private static int enemyKilledCount;//这里的static不可以省略
private void OnMouseDown()
{
Destroy(gameObject);
enemyKilledCount++
if(enemyKilledCount==10)
{
GamePassPanel.SetActive(true);
}
}

static的含义:Static variables are said to belong to the "class" and non-static (member variables) are said to be long to an "object" (an instance of a class type).

树结构

上述游戏项目的结构如图:

【Unity项目实践】游戏架构_方法调用

有三个缺点:

难以维护

团队协作差

不具有可扩展性

解决方式就是低耦合高内聚,低耦合就是要尽量少的出现对象和类的双向引用、循环引用,同时要做到模块化


对象之间交互的方法:

方法调用

委托或者回调

消息或者事件


模块化也有三种:

单例

IOC:Extenject、uFrame的Container、StrangeIOC的绑定

分层:MVC、三层、领域驱动

还有Entity Component、门面模式


使用委托或回调

上述的项目的交互只用到了方法调用,没有使用任何模块化的方式。

方法调用中,类需要引用方法,所以会增加耦合程度。

如果子节点想调用父节点,那么可以使用委托或者回调。

我们可以在上述的文件中新增一个脚本挂载在panel上,脚本如下:

【Unity项目实践】游戏架构_模块化_02

用这种方式,我们可以使用UI的父节点来完成互相的引用和调用,下图展示了我们改进前后的架构图对比。

【Unity项目实践】游戏架构_父节点_03

使用事件


【Unity项目实践】游戏架构_父节点_04

使用委托和事件之后的结构图:

【Unity项目实践】游戏架构_模块化_05

总结一下三种交互方式的区别:

【Unity项目实践】游戏架构_方法调用_06

【Unity项目实践】游戏架构_方法调用_07


Tips:获取根节点:SceneManager.GetActiveScene().GetRootGameObject()


举报

相关推荐

0 条评论