Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Open source dynamic module manage plugin for Unity3D. Under MIT License.

License

Notifications You must be signed in to change notification settings

xclouder/glider

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

9 Commits

Repository files navigation

Glider

Glider

Glider是为Unity3D开发的一个动态模块管理插件,几个意思呢?

她的诞生主要为了解决以下问题:

  1. 场景文件合并困难,如何能让多人协同编辑同一个场景的内容时避免冲突?

  2. 场景中关联不大的模块,偶尔需要互相引用。如何获取这些对象而不耦合?

  3. MonoBehaviour只有Awake()、Start()两个时机做脚本的初始化,如何解决模块加载顺序问题?

  4. 场景能否放手交给美术同学来编辑,逻辑组件、UI能否动态加载?

#核心思想 Glider使用动态加载的思想来解决如上问题,不同人员可以将场景中某一个部分做成Prefab,通过一定规则动态加载到场景中。加载过程中,将可能会被其他模块使用到的对象放到"对象仓库"中。加载过程交由Glider来控制,各模块能收到加载完成的通知。

#特性

  • 支持动态加载UI,彻底分离UI与场景,可兼容各种UI框架(uGUI、NGUI、Toolkit2D等),目前已支持uGUI
  • 可扩展,如果你喜欢可以将所有游戏对象做成动态模块进行加载
  • 统一对象仓库,方便组件之间互相通讯

#运行环境

  • Unity3D 5.0及以上版本

#主要模块

SceneController

场景管理器,提供方便的方法来加载UI、访问对象仓库。

IDynamicModuleManager

动态模块管理器,负责注册模块(IDynamicModule),并通知相关事件。

####IElementCenter 对象仓库,目前实现类为WeakReferenceElementCenter,提供对象的存取接口。

UIModuleManager

UI管理器,实现IDynamicModule接口,在SceneController中作为一个默认的模块加载。

#如何使用动态UI 加载一个动态UI,可以使用SceneController.LoadUIWithDescription(string uiDesFilePath)方法,其中uiDesFilePath指向的是UI描述的配置,其内容如下:

文件:MazeUI.txt

{
	"Prefab": "",
	"CanvasPrefab": "Maze/MazeCanvasWrapper",
	"Children": [
		{
			"Prefab": "Maze/HpDisplayPanel",
		},
		{
			"Prefab": "Maze/BagPanel",
		},
		{
			"Prefab": "Maze/GameOverPanel",
		},
		{
			"Prefab": "Maze/Header",
		},
		{
			"Prefab": "Maze/SkillCtrPanel",
		}
	]
}

这个配置将会解析成UIDescription对象,里面的UI节点会解析成UINode对象。UINode代表的UIPrefab默认会被加载到父节点中。

UIModuleManager加载UI时,有一些约定:

  1. 制作UIPrefab的粒度,建议控制在Panel层面。例如一个弹窗界面,按钮、标题、文字内容等逻辑比较相关,做成一个Prefab会方便不少,虽然Glider能够支持更细的粒度(如果你有特殊需求的话)。

  2. 目录约定。UIPrefabs需要放到"Resources/UIPrefabs/"目录下,UI配置文件需要放在"Resources/UIPrefabs/"目录下。例如:
    DynamicUI/
    Resources/
    UIDescriptions/
    MazeUI.txt
    UIPrefabs/
    Maze/
    HpDisplayPanel.prefab
    BagPanel.prefab
    MazeCanvasWrapper.prefab
    ......

#示例 这里我们简单描述怎样通过配置来加载一个UI

在场景中创建一个EmptyObject,为其添加SceneController脚本,"UI Name"中填写"MazeUI"。

在Resources/UIDescriptions/MazeUI.txt文件中,有如下内容

{
	"Prefab": "",
	"CanvasPrefab": "Maze/MazeCanvasWrapper",
	"Children": [
		{
			"Prefab": "Maze/HpDisplayPanel",
		},
		{
			"Prefab": "Maze/BagPanel",
		},
		{
			"Prefab": "Maze/GameOverPanel",
		},
		{
			"Prefab": "Maze/Header",
		},
		{
			"Prefab": "Maze/SkillCtrPanel",
		}
	]
}

其中Prefab表示创建的UIPrefab位置,这是一个相对于Resources/UIPrefabs/ 的路径。 运行场景,相应的UI加载到场景中。

详情请参考仓库中的Demo

#开源协议 遵守MIT协议

About

Open source dynamic module manage plugin for Unity3D. Under MIT License.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /