- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Unity3D控制反转之Get Start StrangeIOC
? ? ?Unity3D控制反转之Get Start StrangeIOC
? ? ? Strange是一个Unity3D中用于控制反转的第三方框架,控制反转(IOC-Inversion of Control)思想是类间解耦的一个重要方法,对于我来说,任何解耦技术都值得去学习。什么是IOC?这里有详细解答。IOC框架已经在企业级开发和其他非游戏软件的开发中成为了主流,并且可以说已经非常成熟。我觉得它可以帮助游戏开发变得更加容易测试,更好的进行协作开发。我非常想尝试它看看到底可以在游戏开发过程中起到多大的帮助程度。
? ? ? Strange使用起来真的像他的名字一样,非常奇怪。我发现它对于初学者来说,使用起来真的非常闹心,比如你想试着去写一个Hello World都非常不容易。这里是StrangeIOC框架的说明页面,但是这上面并没有一个真正意义上的新手引导来帮助我们了解Strange的工作机制,这就是你现在看到现在这篇文章的意义-用StrangeIOC框架写一个HelloWorld。
?
一些提醒:
在阅读本篇文章之前,最好先去上面提到的官方说明页面了解一下Strange框架的架构(看看它的每个部分的功能以及怎么整合到一块工作的)。
这篇文档使用的是signal(消息)而非event(事件)(因为相比event我更喜欢signal)
我不会把文档中的Unity项目提供出来,因为我希望大家自己动手去做,这样肯定会学到更多:)
这个Hello World示例只是简单的提供注入绑定(injection binding)、命令绑定(command binding)、调解绑定(mediation binding)的示例。
Signal
? 建立一个空Unity项目,下载并且解压Strange框架到Assets文件夹中,我们只需要框架的脚本,把examples和.doc文件夹去除,在Unity的的结构应该是这样的:
? ??
在Assets文件夹下创建Game文件夹,即用来创建Hello World示例的文件夹。文件夹的的结构应该是这样的:
在Scripts文件夹下新建名为HelloWorldSignals.cs的c#脚本,这个类将包含所有用到的signal,让我们coding起来:
?
? 在Strange中,这个signal的概念非常像观察者模式(observer pattern)中的事件(events)。在这里,它以命名类的方式实现了继承Strange的Signal类.别急,我们马上会看到怎么去使用它。
? Strange采用Contexts的概念来识别不同的问题域或者子模块。在实际的游戏项目中,你可以有多个Contexts,比如游戏逻辑、资源、持久层、统计分析、社交模块等等。我们在这个实例中只用了一个Context。
? 一个预构建的context在Strange中称为MVCSContext,MVCSContext默认使用event机制,我们来创建另外一种context父类,改造成使用signal机制,我们其他的context要继承这个SignalContext。
? 在Scripts下创建名为SignalContext.cs的脚本:
using System;
using UnityEngine;
using strange.extensions.context.impl;using mand.api;using mand.impl;using strange.extensions.signal.impl;
namespace Game {
public class SignalContext : MVCSContext {
/**
* Constructor
*/
public SignalContext (MonoBehaviour contextView) : base(contextView) {
}
protected override void addCoreComponents() {
base.addCoreComponents();
// bind signal command binder
injectionBinder.UnbindICommandBinder();
injectionBinder.BindICommandBinder().ToSignalCommandBinder().ToSingleton();
}
您可能关注的文档
最近下载
- 2024新人教版九年级化学上册《第三单元 物质构成的奥秘》大单元整体教学设计.docx
- 基于化学核心素养的初中化学大单元教学设计.docx VIP
- 小学一年级安全教育《校园安全篇》课件.ppt VIP
- 2024考研408计算机基础综合真题及解析.docx VIP
- 小学新课标体育与健康水平三田径大单元18课时教案.docx
- 政治-黑龙江省哈尔滨市第三中学2024-2025学年高三10月月考试题和答案.docx
- 深静脉血栓VTE防治中心年度工作报告总结.pptx
- 【PPT课件】2024中国慢性阻塞性肺疾病基层诊疗与管理指南解读.pptx
- 骨质疏松症的治疗药物考核试题与答案.docx
- 2024年全国新能源汽车关键技术技能大赛考试题库(试题及答案).docx VIP
文档评论(0)