ProjectTiny包里是有UI模块的,当然功能肯定没GameObject的UI强大,常用的Text、Button、Image都有,还没仔细用过,先不用它。
点击了哪个按钮,然后需要执行对应的什么事件,这么点逻辑用ECS来写是很方便的,甚至可以比MonoBehavior写的简单。大致流程是,在运行时动态创建Mesh作为一个按钮,然后设置好Mesh的UV来显示纹理指定部分的字母作为按钮的label(这两个要点可以看前面几篇文章来进行实现),最后写个System来监听点击了哪个按钮,其他System就可以调用该System的接口来判断并执行点击事件了。
为了简单起见,就不动态创建Mesh并设置对应UV了,直接在Unity编辑器里创建4个Quad作为W、A、S、D按钮,也就是上下左右。Mesh也不用设置纹理,直接用空白的,按钮label并不影响点击事件。上代码:
using Unity.Burst;
using Unity.Collections;
using Unity.Entities;
using Unity.Jobs;
using Unity.Mathematics;
using Unity.Transforms;
using Unity.Tiny.Input;
using Unity.Tiny.Rendering;
using Unity.Tiny;
namespace ECSButton {
[GenerateAuthoringComponent]
public struct Button : IComponentData
{
public enum Type : byte {
None,
W, A, S, D
}
public enum State : byte {
None,
Down,
Up
}
public Type type;
public State state;
}
[UpdateInGroup(typeof(InitializationSystemGroup))]
public class ButtonSystem : SystemBase
{
private InputSystem Input