![](https://i-blog.csdnimg.cn/blog_migrate/ae42c1dd3aa40faa1776269f92c8325e.png)
用strangeioc框架实现简单的功能,但每个部分都包含;实现的功能:方块随机移动,会从服务器中随机得到一个分数,当鼠标点击到方块则加一分,并回传到服务器打印出来,且将分数存到模型中;当点击到方块时会有声音,声音的管理专门写了一个自定义窗口来管理所有的音效。
strangeioc框架可从GitHub上获取
点击打开链接,也可在unity中Asset store中获取。
1. Demo1ContextView.cs
此脚本是Root层,继承自ContextView,启动框架,调用,即本工程的Demo1Context。
using strange.extensions.context.impl;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Demo1ContextView : ContextView {
void Awake()
{
this.context = new Demo1Context(this);//启动strangeioc框架(然后调用Demo1Context中的mapBindings)
}
}
2. Demo1Context.cs
using strange.extensions.context.api;
using strange.extensions.context.impl;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Demo1Context : MVCSContext {
public Demo1Context(MonoBehaviour view) : base(view) { }
protected override void mapBindings()//进行绑定映射
{
//manager
injectionBinder.Bind<AudioManager>().To<AudioManager>().ToSingleton();
//model
injectionBinder.Bind<ScoreModel>().To<ScoreModel>().ToSingleton();
//service
//注入绑定
injectionBinder.Bind<IScoreService>().To<ScoreService>().ToSingleton();//以IScoreService创建对象时则以ScoreService创建。 ToSingleton表示这个对象只会在整个工程中生成一个
//command
commandBinder.Bind(Demo1CommandEvent.RequetScore).To<RequestScoreCommand>();//将RequestScoreCommand与Demo1CommandEvent中RequestScore事件绑定,当Mediator中发起对应的事件请求时直接执行RequestScoreCommand中Execute()
commandBinder.Bind(Demo1CommandEvent.UpdateScore).To<UpdateScoreCommand>();
//mediator
mediationBinder.Bind<CubeView>().To<CubeMediator>();//将View与Mediator绑定,当View创建时,会自动创建Mediator
//绑定开始事件 创建一个startcommand
commandBinder.Bind(ContextEvent.START).To<StartCommand>().Once();//Once()表示只绑定一次,当执行之后就解绑
}
}
3. StartCommand.cs
开始命令,做一些初始化工作。
using strange.extensions.command.impl;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 开始命令 startcommand做一些初始化的操作
/// </summary>
public class StartCommand : Command {
[Inject]
public AudioManager audioManager { get; set; }
/// <summary>
/// 当这个命令被执行的时候,默认会调用Excute方法
/// </summary>
public override void Execute()
{
Debug.Log("start command execute!");
//AudioManager的初始化
audioManager.Init();
}
}