unity 任务系统代码
时间: 2024-04-11 11:10:16 浏览: 81
以下是一个简单的Unity任务系统代码示例:
```csharp
using System.Collections.Generic;
using UnityEngine;
public class TaskManager : MonoBehaviour
{
private static TaskManager instance;
public static TaskManager Instance
{
get { return instance; }
}
private List<Task> tasks = new List<Task>();
private void Awake()
{
if (instance != null && instance != this)
{
Destroy(this.gameObject);
return;
}
instance = this;
}
public void AddTask(Task task)
{
tasks.Add(task);
}
public void RemoveTask(Task task)
{
tasks.Remove(task);
}
private void Update()
{
for (int i = 0; i < tasks.Count; i++)
{
Task task = tasks[i];
if (!task.IsFinished)
{
task.UpdateTask();
}
else
{
tasks.RemoveAt(i);
i--;
}
}
}
}
public abstract class Task
{
protected bool isFinished;
public bool IsFinished
{
get { return isFinished; }
}
public abstract void UpdateTask();
}
public class ExampleTask : Task
{
private float timer;
private float duration;
public ExampleTask(float duration)
{
this.duration = duration;
}
public override void UpdateTask()
{
timer += Time.deltaTime;
if (timer >= duration)
{
isFinished = true;
}
}
}
```
在这个示例中,我们有一个`TaskManager`类,它负责管理所有任务。每个任务都是一个派生自`Task`类的具体实现。您可以根据需要创建不同的任务类型。
在`Task`类中,我们定义了一个`isFinished`字段和一个`UpdateTask()`方法。任务的实现应该重写`UpdateTask()`方法,并在完成时将`isFinished`字段设置为`true`。
在`TaskManager`类中,我们存储了所有任务,并在每个帧上循环遍历它们。如果任务未完成,则调用其`UpdateTask()`方法。如果任务已完成,则将其从`tasks`列表中删除。
您可以使用以下代码将任务添加到任务管理器:
```csharp
TaskManager.Instance.AddTask(new ExampleTask(5f));
```
这将添加一个名为`ExampleTask`的新任务,其持续时间为5秒。在这个示例中,我们使用了一个简单的计时器来模拟任务的完成。您可以根据需要替换此行为。
希望这个示例能帮助您开始编写自己的Unity任务系统代码!
阅读全文