c# 不同动作的队列
c# A Queue of different Action
我的队列Class;
public class JobManager : MonoBehaviour {
private Queue<Action> queue;
public void AddAction(Action action)
{
queue.Enqueue(action);
}
....
我有两个方法:
void CreateCube()
{
// doSomething..
}
void SetPosition(Vector3 pos)
{
// doSomething..
}
我可以用这个:
JobManager.Instance.AddAction(CreateCube);
但这不是:
JobManager.Instance.AddAction(SetPosition);
我如何为所有不同的动作定义一个队列?或者如何添加不同的操作?
编辑:
JobManager 像这样调用 Actions;
IEnumerator ActionControl(){
while (true){
if (currentQueue != null){
while (true){
currentQueue();
yield return null;
currentQueue = null;
break;
}
}
yield return null;
}
}
private void Update(){
if (queue.Count > 0 && currentQueue == null){
currentQueue = queue.Dequeue();
}
}
我真正想要的是任何方法都可以放在一个队列中。 (是否带参数)然后我们将 运行 他们按顺序排列。这可能吗?
您的问题是 queue
的类型是 Queue<Action>
。要接受这种新类型的关闭操作,可能需要另一个 Queue<Action<Vector3>>
.
类型的队列
你需要这样的东西:
public class JobManager
{
private Queue<Action> plainQueue;
private Queue<Action<Vector3>> vectorQueue;
public void AddAction(Action action)
{
plainQueue.Enqueue(action);
}
public void AddAction(Action<Vector3> action)
{
vectorQueue.Enqueue(action);
}
}
此外,.AddAction(() => SetPosition(pos))
会起作用,但请记住,这是在创建一个匿名的 Action
来包装 Action<Vector3>
。它可能导致难以调试代码。
我的队列Class;
public class JobManager : MonoBehaviour {
private Queue<Action> queue;
public void AddAction(Action action)
{
queue.Enqueue(action);
}
....
我有两个方法:
void CreateCube()
{
// doSomething..
}
void SetPosition(Vector3 pos)
{
// doSomething..
}
我可以用这个:
JobManager.Instance.AddAction(CreateCube);
但这不是:
JobManager.Instance.AddAction(SetPosition);
我如何为所有不同的动作定义一个队列?或者如何添加不同的操作?
编辑:
JobManager 像这样调用 Actions;
IEnumerator ActionControl(){
while (true){
if (currentQueue != null){
while (true){
currentQueue();
yield return null;
currentQueue = null;
break;
}
}
yield return null;
}
}
private void Update(){
if (queue.Count > 0 && currentQueue == null){
currentQueue = queue.Dequeue();
}
}
我真正想要的是任何方法都可以放在一个队列中。 (是否带参数)然后我们将 运行 他们按顺序排列。这可能吗?
您的问题是 queue
的类型是 Queue<Action>
。要接受这种新类型的关闭操作,可能需要另一个 Queue<Action<Vector3>>
.
你需要这样的东西:
public class JobManager
{
private Queue<Action> plainQueue;
private Queue<Action<Vector3>> vectorQueue;
public void AddAction(Action action)
{
plainQueue.Enqueue(action);
}
public void AddAction(Action<Vector3> action)
{
vectorQueue.Enqueue(action);
}
}
此外,.AddAction(() => SetPosition(pos))
会起作用,但请记住,这是在创建一个匿名的 Action
来包装 Action<Vector3>
。它可能导致难以调试代码。