Unity-IOC-Unity

此类库为IOC库的拓展,旨在提升Unity项目开发便捷性甚至性能.以更优雅、便捷和高性能的方式响应Unity提供的各种事件回调.

入门

添加引用

通过Package Manager添加如下依赖:

Package Description
https://github.com/kakashiio/Unity-Reflection.git#1.0.0 Reflection
https://github.com/kakashiio/Unity-IOC.git#1.0.0 IOC
https://github.com/kakashiio/Unity-IOC-Unity.git#1.0.0 IOC-Unity

创建一个UnityIOCContainer

1
2
3
4
5
6
7
ITypeContainer typeContainer = new TypeContainerCollection(new List<ITypeContainer>
{
new TypeContainer(Assembly.GetExecutingAssembly()),
new TypeContainer(typeof(UnityIOCContainer).Assembly),
new TypeContainer(typeof(IOCContainer).Assembly)
});
new UnityIOCContainer(typeContainer);

将上述代码添加到你应用程序启动的位置.

根据需要实现一下Unity相关的接口

  • IUnityUpdate
  • IUnityLateUpdate
  • IUnityFixedUpdate
  • IUnityGUI
  • IUnityApplication
  • IUnityEditor

假设你希望每帧调用一段代码.传统的方式为创建一个MonoBehaviour,在该MonoBehaviourUpdate方法中增加你的方法.而通过上面添加引用引入的IOC库和IOC-Unity之后,可以使用以下代码实现:

1
2
3
4
5
6
7
8
[IOCComponent]
public class NormalClassButNotMonoBehaviour : IUnityUpdate
{
public void Update()
{
// 需要每帧执行的代码.
}
}

这样就轻松实现了上述需求.

IUnityUpdate的代码为IOC-Unity库提供,其代码非常简单,如下所示:

1
2
3
4
public interface IUnityUpdate
{
void Update();
}

这种方式甚至比传统方式性能更高!

其他组件

CoroutineManager

用于帮助更方便执行协程.如果你希望执行一些协程,那么可以编写如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[IOCComponent]
public class HttpManager4Demo : IUnityGUI
{
[Autowired]
private CoroutineManager _CoroutineManager;

public void Get(string url, Action<string> onGet)
{
_CoroutineManager.StartCoroutine(_StartGet(url, onGet));
}

private IEnumerator _StartGet(string url, Action<string> onGet, Action<string> onError = null)
{
UnityWebRequest unityWebRequest = UnityWebRequest.Get(url);
yield return unityWebRequest.SendWebRequest();
if (unityWebRequest.result == UnityWebRequest.Result.Success)
{
onGet?.Invoke(unityWebRequest.downloadHandler.text);
}
else
{
onError?.Invoke(unityWebRequest.error);
}
}

public void OnGUI()
{
if (GUILayout.Button("Get"))
{
Get("https://unity3d.io", (msg) => Debug.Log(msg));
}
}
}

未来

会增加更多Unity API和组件支持以加速游戏开发. 如果你有更好建议,也期待你指出.

完整的Package工程地址在https://github.com/kakashiio/Unity-IOC-Unity

致谢

感谢百忙之中阅读本文,如果觉得我的文章帮到了你,欢迎:转载、关注git、为仓库增加star等.你的简单回馈将是我继续创作的动力.

作者

Kakashi

发布于

2022-05-09

更新于

2022-05-09

许可协议

评论