我正在编写一个Unity3D游戏,该游戏从外部来源获取网络事件。实际的网络读取操作在其自己的线程中。
当我从网络中读取某些项目时,我希望Monobehaviour在下一次Update()
调用中使用该项目作为参数来调用某些函数。这就是我现在如何实现的方式(为简单起见,仅使用伪代码)
网络线程
OtherScript script;
while true {
Thing thing = Network.read()
script.queue.put(thing);
}
Monobehaviour(OtherScript)
SynchronizedQueue<Thing> queue;
void Update() {
while !queue.isEmpty() {
useThing(queue.pop())
}
}
这肯定是可行的,但是我的问题是我要订购20多种不同类型的事物,每种事物都有自己的队列和自己的“回调”功能,从而产生了很多样板。
是否存在某种可以自动执行此功能的内置机制?
答案 0 :(得分:1)
您的解决方案似乎在您的问题中。您可以改用事件。
网络线程
public static event EventHandler<NetworkArg>RaiseNetwork;
protected void OnNetwork(NetworkArg arg)
{
if(RaiseNetwork != null) { RaiseNetwork(this, arg); }
}
while true {
Thing thing = Network.read()
RaiseNetwork(new NetworkArg(thing));
}
NetworkArg类
public class NetworkArg : System.EventArgs
{
public Thing thing { get; private set;}
public NetworkArg(Thing thing){ this.thing = thing; }
}
Monobehaviour(OtherScript)
void Start()
{
NetworkThread.RaiseNetwork += UseThing;
}
private void UseThing (object sender, NetworkArg arg){ }