• 机器人占领就业市场后:人类还能从事这些工作 2019-03-04
  • 以网络文化建设推进文化惠民 2019-03-03
  • 贸易战,只能是双输。我们是众志成城,美国却不一定。 2019-02-26
  • 辣评2016年9月最HOT 轿车获奖榜单 2019-02-22
  • 交通运输部路网中心:端午假期高速通行不免费 2019-02-18
  • 《陕西省县域经济社会发展监测考评办法》解读 2019-02-18
  • 西部网(陕西新闻网)www.cnwest.com 2019-02-13
  • 短途一日游 游客量猛增 小长假新疆接待游客353.6万人次 2019-02-13
  • 南昌重拳整治酒驾毒驾 2019-02-08
  • 女性之声——全国妇联 2019-02-08
  • 信息网络传播视听节目许可证 2019-02-03
  • 打开书籍,了解文物背后的中国温度 2019-02-03
  • 中央环保督察组:石家庄市无极县“敷衍整改” 2019-02-02
  • China Focus Dragon Boat Festival celebrated across China - Culture News - CQNEWS 2019-02-02
  • 铁路迎端午客流最高峰 今日预计发送旅客1318万人次 2019-01-28
  • 【游戏技术群】959392658  【游戏出海群】12067810
    福建36选7和值走势图 手机端
    查看: 13782|回复: 67
    发新帖

    选7走势图: [DevTips] Unity简易请求系统

    [复制链接]  [移动端链接]
    排名
    9765
    昨日变化
    5

    福建36选7和值走势图 www.00-na.com 263

    主题

    301

    帖子

    1602

    积分

    Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

    UID
    159865
    好友
    9
    蛮牛币
    3981
    威望
    0
    注册时间
    2016-8-1
    在线时间
    626 小时
    最后登录
    2018-3-8

    蛮牛译员

    跳转到指定楼层
    楼主
    发表于 2017-11-2 11:06:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?注册帐号

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

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

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


    用法
    我将从如何使用它开始。 有三个实体与系统进行交互。 这些是查询请求,查询请求者和查询提供者。 请求者和提供者可以在同一个场景或不同的场景中。 查询请求只不过是一个保存请求参数的类。 这是一个示例请求:
    [C#] 纯文本查看 复制代码
    public class TestRequest : QueryRequest {
        private readonly int intParam;
        private readonly string stringParam;
        public TestRequest(int intParam, string stringParam) {
            this.intParam = intParam;
            this.stringParam = stringParam;
        }
        public int IntParam {
            get {
                return intParam;
            }
        }
        public string StringParam {
            get {
                return stringParam;
            }
        }
    }


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

    参数提供者的寄存如下所示:
    [C#] 纯文本查看 复制代码
    public class QueryManagerTestProvider : MonoBehaviour {
        private void Awake() {
            QueryManager.RegisterProvider<TestRequest, GameObject>(TestProvider);
        }
        private GameObject TestProvider(TestRequest request) {
            // Log the parameters just to show that they are passed
            Debug.Log("intParam: " + request.IntParam);
            Debug.Log("stringParam: " + request.StringParam);
            return this.gameObject;
        }
    }


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

    示例查询请求将如下所示:
    [C#] 纯文本查看 复制代码
    public class QueryManagerTestRequester : MonoBehaviour {
        private void Start() {
            GameObject result = QueryManager.Query<TestRequest, GameObject>(new TestRequest(77, "Hello Query Manager"));
            Debug.Log("result: " + result.gameObject.name);
        }
    }


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



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


    框架代码
    让我们从基类QueryRequest开始:

    [C#] 纯文本查看 复制代码
    public abstract class QueryRequest {
    }


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

    接下来是QueryManagerImplementation类,它将是静态类QueryManager在内部使用的类。 看起来像这样:
    [C#] 纯文本查看 复制代码
    class QueryManagerImplementation {
        private delegate object QueryProvider(QueryRequest request); // The internal delegate that we manage
        private Dictionary<Type, QueryProvider> providerMap = new Dictionary<Type, QueryProvider>();
        public QueryManagerImplementation() {
        }
        public void RegisterProvider<R, V>(QueryManager.QueryProvider<R, V> provider) where R : QueryRequest {
            Type type = typeof(R);
            Assertion.Assert(!this.providerMap.ContainsKey(type)); // Should not contain the provider for a certain request yet
            // Make the internal delegate which invokes the generic delegate
            QueryProvider internalProvider = delegate (QueryRequest request) {
                return provider((R)request);
            };
            this.providerMap[type] = internalProvider;
        }
        public bool HasProvider<R>() where R : QueryRequest {
            return this.providerMap.ContainsKey(typeof(R));
        }
        public V Query<R, V>(R request) where R : QueryRequest {
            Type type = typeof(R);
            // Invoke the provider
            // This will throw an error if a provider does not exist
            return (V)this.providerMap[type](request);
        }
    }


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

    最后,静态QueryManager类看起来像这样:
    [C#] 纯文本查看 复制代码
    public static class QueryManager {
        public delegate V QueryProvider<R, V>(R request) where R : QueryRequest;
        private static readonly QueryManagerImplementation INTERNAL_MANAGER = new QueryManagerImplementation();
        public static void RegisterProvider<R, V>(QueryProvider<R, V> provider) where R : QueryRequest {
            INTERNAL_MANAGER.RegisterProvider(provider);
        }
        public static bool HasProvider<R>() where R : QueryRequest {
            return INTERNAL_MANAGER.HasProvider<R>();
        }
        public static V Query<R, V>(R request) where R : QueryRequest {
            return INTERNAL_MANAGER.Query<R, V>(request);
        }
    }



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

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




    原文标题:Simple Query System



    5熟悉之中
    782/1000
    排名
    5230
    昨日变化
    4

    3

    主题

    231

    帖子

    782

    积分

    Rank: 5Rank: 5

    UID
    243817
    好友
    1
    蛮牛币
    657
    威望
    0
    注册时间
    2017-9-16
    在线时间
    274 小时
    最后登录
    2019-3-11
    沙发
    发表于 2017-11-2 11:32:59 | 只看该作者
    受教了,感谢楼主分享

    5熟悉之中
    916/1000
    排名
    2730
    昨日变化
    3

    0

    主题

    171

    帖子

    916

    积分

    Rank: 5Rank: 5

    UID
    224879
    好友
    1
    蛮牛币
    1412
    威望
    0
    注册时间
    2017-6-2
    在线时间
    214 小时
    最后登录
    2018-11-29
    板凳
    发表于 2017-11-2 11:41:18 | 只看该作者
    谢谢楼主分享。。。。

    6蛮牛粉丝
    1341/1500
    排名
    2134
    昨日变化
    5

    0

    主题

    318

    帖子

    1341

    积分

    Rank: 6Rank: 6Rank: 6

    UID
    228538
    好友
    11
    蛮牛币
    3161
    威望
    0
    注册时间
    2017-6-24
    在线时间
    375 小时
    最后登录
    2019-3-18
    地板
    发表于 2017-11-3 09:34:11 | 只看该作者
    受教了 感谢分享

    7日久生情
    4372/5000
    排名
    2321
    昨日变化
    7

    5

    主题

    3109

    帖子

    4372

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    209186
    好友
    5
    蛮牛币
    1121
    威望
    0
    注册时间
    2017-3-1
    在线时间
    650 小时
    最后登录
    2019-3-18
    5#
    发表于 2017-11-3 11:27:20 | 只看该作者
    谢谢分享

    5熟悉之中
    688/1000
    排名
    3922
    昨日变化

    8

    主题

    104

    帖子

    688

    积分

    Rank: 5Rank: 5

    UID
    232340
    好友
    0
    蛮牛币
    568
    威望
    0
    注册时间
    2017-7-15
    在线时间
    196 小时
    最后登录
    2019-3-17
    6#
    发表于 2017-11-5 09:40:14 | 只看该作者
    受教了,刚入门,虽然没看懂,但已收藏,能力提高了再来细研究

    排名
    34854
    昨日变化
    8

    0

    主题

    12

    帖子

    24

    积分

    Rank: 1

    UID
    196822
    好友
    0
    蛮牛币
    23
    威望
    0
    注册时间
    2016-12-28
    在线时间
    4 小时
    最后登录
    2017-11-8
    7#
    发表于 2017-11-8 10:57:04 | 只看该作者
    感谢分享经验

    5熟悉之中
    762/1000
    排名
    5362
    昨日变化
    7

    20

    主题

    350

    帖子

    762

    积分

    Rank: 5Rank: 5

    UID
    249218
    好友
    3
    蛮牛币
    2750
    威望
    0
    注册时间
    2017-10-17
    在线时间
    118 小时
    最后登录
    2018-12-10
    8#
    发表于 2017-11-14 08:35:37 | 只看该作者
    Unity简易请求系统 [修改]

    6蛮牛粉丝
    1011/1500
    排名
    2073
    昨日变化
    9

    0

    主题

    112

    帖子

    1011

    积分

    Rank: 6Rank: 6Rank: 6

    UID
    252416
    好友
    0
    蛮牛币
    1613
    威望
    0
    注册时间
    2017-11-3
    在线时间
    235 小时
    最后登录
    2019-3-18
    9#
    发表于 2017-11-14 09:31:33 | 只看该作者
    6666666666666

    6蛮牛粉丝
    1116/1500
    排名
    2346
    昨日变化
    3

    1

    主题

    156

    帖子

    1116

    积分

    Rank: 6Rank: 6Rank: 6

    UID
    236305
    好友
    1
    蛮牛币
    1547
    威望
    0
    注册时间
    2017-8-7
    在线时间
    357 小时
    最后登录
    2019-3-18
    10#
    发表于 2017-11-14 13:50:16 | 只看该作者
    感谢分享
    [发帖际遇]: SrMao_e432t 发帖时在路边捡到 1 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

    3偶尔光临
    159/300
    排名
    12465
    昨日变化
    2

    0

    主题

    22

    帖子

    159

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    229624
    好友
    0
    蛮牛币
    352
    威望
    0
    注册时间
    2017-6-30
    在线时间
    65 小时
    最后登录
    2018-9-19
    11#
    发表于 2017-11-16 19:02:00 | 只看该作者
    等分第三方啊未施粉黛

    5熟悉之中
    563/1000
    排名
    4825
    昨日变化
    2

    1

    主题

    112

    帖子

    563

    积分

    Rank: 5Rank: 5

    UID
    79201
    好友
    0
    蛮牛币
    1333
    威望
    0
    注册时间
    2015-3-12
    在线时间
    144 小时
    最后登录
    2017-12-20
    12#
    发表于 2017-11-20 20:59:35 | 只看该作者
    多谢分享

    7日久生情
    2880/5000
    排名
    2522
    昨日变化
    1

    2

    主题

    1851

    帖子

    2880

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    241666
    好友
    0
    蛮牛币
    10773
    威望
    0
    注册时间
    2017-9-6
    在线时间
    453 小时
    最后登录
    2019-1-31
    13#
    发表于 2017-11-27 09:21:33 来自Mobile--- | 只看该作者
    感谢分享

    7日久生情
    2880/5000
    排名
    2522
    昨日变化
    1

    2

    主题

    1851

    帖子

    2880

    积分

    Rank: 7Rank: 7Rank: 7Rank: 7

    UID
    241666
    好友
    0
    蛮牛币
    10773
    威望
    0
    注册时间
    2017-9-6
    在线时间
    453 小时
    最后登录
    2019-1-31
    14#
    发表于 2017-11-27 09:30:37 来自Mobile--- | 只看该作者
    感谢分享

    3偶尔光临
    280/300
    排名
    17367
    昨日变化
    5

    0

    主题

    203

    帖子

    280

    积分

    Rank: 3Rank: 3Rank: 3

    UID
    254038
    好友
    0
    蛮牛币
    177
    威望
    0
    注册时间
    2017-11-13
    在线时间
    40 小时
    最后登录
    2018-7-30
    15#
    发表于 2017-11-27 22:07:42 | 只看该作者

    感谢分享

    您需要登录后才可以回帖 登录 | 注册帐号

    本版积分规则

    快速回复 福建36选7和值走势图 返回列表
  • 机器人占领就业市场后:人类还能从事这些工作 2019-03-04
  • 以网络文化建设推进文化惠民 2019-03-03
  • 贸易战,只能是双输。我们是众志成城,美国却不一定。 2019-02-26
  • 辣评2016年9月最HOT 轿车获奖榜单 2019-02-22
  • 交通运输部路网中心:端午假期高速通行不免费 2019-02-18
  • 《陕西省县域经济社会发展监测考评办法》解读 2019-02-18
  • 西部网(陕西新闻网)www.cnwest.com 2019-02-13
  • 短途一日游 游客量猛增 小长假新疆接待游客353.6万人次 2019-02-13
  • 南昌重拳整治酒驾毒驾 2019-02-08
  • 女性之声——全国妇联 2019-02-08
  • 信息网络传播视听节目许可证 2019-02-03
  • 打开书籍,了解文物背后的中国温度 2019-02-03
  • 中央环保督察组:石家庄市无极县“敷衍整改” 2019-02-02
  • China Focus Dragon Boat Festival celebrated across China - Culture News - CQNEWS 2019-02-02
  • 铁路迎端午客流最高峰 今日预计发送旅客1318万人次 2019-01-28