Unity StrangeIoC HelloWorld
unity有一个叫StrangeIoC的框架插件,这里写了一个使用StrangeIoC的HelloWorld,比他自带的demo更为简单,方便理解
1.插件下载,在Asset Store直接搜索StrangeIoC
2.在Asset文件夹中,新建一个文件夹Game_D,用来放我们编写的脚本,在Game_D文件下创建controller文件夹,用来存放控制脚本,在controller新建一个脚本DGameCommand,继承自EventCommand
using strange.extensions.command.impl;
using strange.extensions.context.api;
using UnityEngine; public class DGameCommand : EventCommand { public override void Execute()
{
Debug.Log("Start DGame");
}
}
3.在Game_D文件夹下创建一个脚本DGameContext继承自MVCSContext,主要用接口绑定、命令绑定、view绑定
using UnityEngine;
using System.Collections;
using strange.extensions.context.impl;
using strange.extensions.command.impl;
using strange.extensions.context.api; public class DGameContext : MVCSContext {
public DGameContext(MonoBehaviour view)
: base(view)
{
} protected override void mapBindings()
{
base.mapBindings();
commandBinder.Bind(ContextEvent.START).To<DGameCommand>().Once();
}
}
4.在Game_D文件夹下创建一个脚本DGameRoot继承自ContextView,这里就是框架程序的入口,把DGameRoot拖在unity场景的一个物体上,运行即可执行,其实这里就是最小的demo,但是后面还是会写到接口的实现调用,view的实现调用
using UnityEngine;
using System.Collections;
using strange.extensions.context.impl; public class DGameRoot : ContextView { void Awake()
{
context = new DGameContext(this);
}
}
5.在Game_D文件夹下创建一个文件夹interface,并在interface文件夹下新建一个接口IDoSomething,再新建一个接口实现类DDoSomething,接口实现可用于一些manager脚本
接口:
public interface IDoSomething {
void DoSomeFunction();
}
接口实现:
using UnityEngine;
using System.Collections; public class DDoSomething : IDoSomething {
public void DoSomeFunction()
{
Debug.Log("interface do something function");
}
}
6.在controller文件夹下新建一个脚本DDoSomethingCommand,用来执行实现的接口功能
using UnityEngine;
using System.Collections;
using strange.extensions.command.impl; public class DDoSomethingCommand : EventCommand {
[Inject]
public IDoSomething ds { get; set; }
public override void Execute()
{
//执行其脚本
ds.DoSomeFunction();
}
}
7.这里使用Event,所以需要在controller文件夹下新建一个脚本DGameEvent
public enum DGameEvent {
DoSomething,
}
8.打开DGameContext脚本,添加以下内容
using UnityEngine;
using System.Collections;
using strange.extensions.context.impl;
using strange.extensions.command.impl;
using strange.extensions.context.api; public class DGameContext : MVCSContext {
public DGameContext(MonoBehaviour view)
: base(view)
{
} protected override void mapBindings()
{
base.mapBindings();
injectionBinder.Bind<IDoSomething>().To<DDoSomething>().ToSingleton();
commandBinder.Bind(DGameEvent.DoSomething).To<DDoSomethingCommand>();
commandBinder.Bind(ContextEvent.START).To<DGameCommand>().Once();
}
}
9.打开DGameCommand脚本,添加以下内容,这里就是接口函数的调用,可以再度运行调试
using strange.extensions.command.impl;
using strange.extensions.context.api;
using UnityEngine; public class DGameCommand : EventCommand { public override void Execute()
{
Debug.Log("Start DGame");
dispatcher.Dispatch(DGameEvent.DoSomething);
}
}
10.在Game_D文件下新建一个文件夹view文件夹,并在view文件夹下新建一个脚本DButtonView继承自EventView
using UnityEngine;
using System.Collections;
using strange.extensions.mediation.impl;
public class DButtonView : EventView {
internal const string CLICK_BUTTON = "CLICK_BUTTON";
void OnGUI()
{
if (GUI.Button(new Rect(0, 0, 100, 30), "Click"))
{
dispatcher.Dispatch(CLICK_BUTTON);
}
}
}
11.在view文件夹下新建一个脚本DButtonMediator,继承自EventMediator
using UnityEngine;
using System.Collections;
using strange.extensions.mediation.impl; public class DButtonMediator :EventMediator{
[Inject]
public DButtonView btnView{get;set;} public override void OnRegister()
{
base.OnRegister();
btnView.dispatcher.AddListener(DButtonView.CLICK_BUTTON, OnBtnViewClick);
}
void OnBtnViewClick()
{
Debug.Log("click view button");
}
}
12.再改一次DGameContext脚本:
using UnityEngine;
using System.Collections;
using strange.extensions.context.impl;
using strange.extensions.command.impl;
using strange.extensions.context.api; public class DGameContext : MVCSContext {
public DGameContext(MonoBehaviour view)
: base(view)
{
} protected override void mapBindings()
{
base.mapBindings();
injectionBinder.Bind<IDoSomething>().To<DDoSomething>().ToSingleton(); mediationBinder.Bind<DButtonView>().To<DButtonMediator>();
commandBinder.Bind(DGameEvent.DoSomething).To<DDoSomethingCommand>();
commandBinder.Bind(ContextEvent.START).To<DGameCommand>().Once();
}
}
13.最后再在场景中新建一个物体,将DButtonView拖上去,然后运行
14.最后都建议,自己手动写一遍代码,方便理解
Unity StrangeIoC HelloWorld的更多相关文章
- Unity StrangeIoC框架
Unity StrangeIoC框架 http://blog.csdn.net/y1196645376/article/details/52746251
- unity StrangeIoc
已经很久没有写博客,主要原因还是自我荒废了太久,在学习上失去了动力.最近来新的公司实习,以前都是做项目的开发,现在被调到框架组,主要从事的是框架维护还有开发.学习了许多新的知识还有优秀的框架,今天就写 ...
- Unity StrangeIoc框架 (一)
最近想项目中需要使用这个架构 因此 上网看了很多资料摸索 但是对于初学者来说大多数的资料不是那么容易理解 而且文档也是英文的阅读起来有点吃力 所以记录一下自己阅读的过程 方便以后翻阅和跟我一 ...
- 【拥抱元宇宙】创建你的第一个Unity程序HelloWorld,并发布
第一个Unity程序--Hello World. 1.需要先下载一个Unity Hub,以及安装Unity编辑器.Unity Hub需要登陆,激活码可以选择个人用户,免费的.免费的无法改变启动画面,其 ...
- Unity StrangeIoc框架 (二)
MVCSContex :the big picture 1.应用程序的入口是一个类成为ContextView,这是一个Monobehavior实例化MVCSContext 2.用MVCSContext ...
- Unity StrangeIoc框架 (三)signal信号方式
先创建TestRoot using UnityEngine; using System.Collections; using strange.extensions.context.impl; publ ...
- Bootstrapper.cs
using System.Windows; using Microsoft.Practices.Prism.Modularity; using Microsoft.Practices.Prism.Un ...
- 0 quickstart
说明 使用的安装包有: Prism 6.3 Unity 4.0.1 基于Prism框架的应用程序都包含一个主项目和若干功能模块,主项目负责启动时初始化工作,包括依赖注入容器,定义Shell等等.功能模 ...
- Unity MVC框架 StrangeIoC
StrangeIoC是一个超轻量级和高度可扩展的控制反转(IoC)框架,专门为C#和Unity编写. 项目地址:https://github.com/strangeioc/strangeioc 文档地 ...
随机推荐
- 一口一口吃掉Hibernate(七)——继承映射
前几篇博文中讲到了常用的几种关联映射.其实hibernate中还有一种"省劲儿"的映射,那就是--"继承映射". 学了这么多的关系映射了,继承映射,从字面上也能 ...
- Hibernate给表和字段设置前后缀及分隔符
在<一口一口吃掉Hibernate(一)--使用SchemaExport生成数据表>中介绍了如何生成数据表.但是这只是最基本的.hibernate在生成或者操作数据库时,会受一些限制.比如 ...
- jvm(四):垃圾回收
垃圾回收我们主要从以下三个方面进行描述 垃圾对象的判断 目前判断对象为垃圾对象有两种方法:引用计数法,可达性分析法,目前普遍是的是可达性分析法 可达性分析法的实现原理: 定义gcroot一直往下找,如 ...
- 重写轮子之 ID3
这是半成品, 已完成了 fit() 部分, 形成了包含一棵完整树的 node 对象. 后续工作是需解析该 node对象, 完成 predict() 工作. # !/usr/bin/python # - ...
- mysql常见的优化需要注意的点
1.explain分析explian引用索引基数show indexes from table_name;主键索引具有最好的基数 测试时 不走缓存SELECT SQL_NO_CACHE id from ...
- C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节
C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节 1.Qt概述 1.1 什么是Qt Qt是一个跨平台的C++图形用户界面应用程序框架.它为应用程序开发者提供建立艺术级图形界面 ...
- ABP文档笔记 - 事件BUS
文档: ABP框架 - 领域事件(EventBus) EventBus & Domain Events ABP源码分析二十五:EventBus EventBus(事件总线) EventBus是 ...
- vmware 12中安装MAC OS X Lion 10.7
下载并安装vmware. 下载并安装MAC补丁. 创建虚拟机. 设置ISO文件. 开启虚拟机. 安装vmware tools. 1. 下载并安装vmware.我是直接在腾 ...
- Rails多路径调用相同方法原路返回的方法
有时候可能有多条path到达同一个method,此时,我们希望在该方法完成后自动转到之前进入的path中去,其实实现起来非常简单,只需要实现如下两个方法: def redirect_back_or(d ...
- Android开发学习之路--性能优化之布局优化
Android性能优化方面也有很多文章了,这里就做一个总结,从原理到方法,工具等做一个简单的了解,从而可以慢慢地改变编码风格,从而提高性能. 一.Android系统是如何处理UI组件的更新操作的 ...