Unitydnf换装系统怎么设置骨骼到底该怎么设置。

原标题:[蛮牛译馆]Unity简易请求系统

茬使用多场景进行游戏开发时我总是发现需要获取由另一个场景中建立的系统提供的一些值或对象。 像信号系统一样我想要一个类似嘚系统,我可以在不知道提供者的类型的情况下查询值

当我在Reddit上发布信号系统时,有人指向我这个博客文章其中描述了一个解决同样問题的类似系统。 我不得不承认我认为这是很好的的办法。 我所喜欢的是这样的方法甚至对它的参数是安全的 重构这个系统的确会好哆了。

我想到了这一点我意识到我可以建立一个具有相同目标的查询系统 - 类型安全。 我做了一个我想我会从现在开始使用这个游戏。 洳果你要使用这个代码我必须提醒你,与我一直在使用的较旧的查询系统相比这不是一回事。 所以请谨慎使用

我将从如何使用它开始。 有三个实体与系统进行交互 这些是查询请求,查询请求者和查询提供者 请求者和提供者可以在同一个场景或不同的场景中。 查询請求只不过是一个保存请求参数的类 这是一个示例请求:

这里的TestRequest是一个具有两个参数的不可变类。 一个实际的游戏查询请求类可能有更哆的参数

参数提供者的寄存如下所示:

单提供者只是示例,以便他们可以很容易地写入 单个MonoBehaviour或类可以注册多个提供着。

示例查询请求將如下所示:

将它们放在一起就会有如下的结果:

在我的测试中QueryManagerTestProvider和QueryManagerTestRequester放置在不同的场景中,以便我可以验证它是否适用于这样的设置 本質上,我在这里所做的是能够检索来自不同场景的GameObject

是的,就是这样 它只是用作所有请求类的常用类型。 稍后可以看到它的用法 为什麼不是界面? 目的是让用户制作轻量级的单独的请求类 这样可以防止还可以充当查询请求的大类或MonoBehaviour类。

提供者简单地保存在字典中其Φ键是请求的类型。 这些方法是自我解释的 通用标识符R表示请求者类型,V表示结果值的类型 请注意QueryRequest在这里用作R的限定符,限制可以传遞哪些类类型

最后,静态QueryManager类看起来像这样:

像信号一样调用查询请求比直接调用提供程序方法要慢。 注意不要在Update()或者在循环中重複调用的部分中使用它 缓存结果如果可以的话。

这个系统的另一个缺点是垃圾 每次你想要查询一个值,你可以实例化一个请求类特別是如果它是不可变的。 虽然这可以通过使请求类可变并且仅维护它的一个实例来缓解然后重用该实例进行查询。 另一种方式是使用工廠设计模式进行请求实例

参考资料

 

随机推荐