这是我计划介绍的一些数据类型的第一篇文章,这些数据类型确实是初学者游戏程序员未真正使用的数据类型,并且您可能会考虑在游戏代码中使用它们。 我们从哪里开始呢? 使用我最喜欢的数据类型Queue。
如果您有购买杂货的经验,您可能已经对Queue是什么有了一些猜测。 与商店队列类似,它是对象的先进先出(FIFO)集合。 换句话说,如果将字符串“ cat”,“ dog”和“ mouse”添加到队列中,则会以相同的顺序将它们取出。

那么,为什么要使用队列而不是仅使用数组或列表呢? 首先,队列(以及System.Collections.Generic中的大多数集合)可以随着新对象的添加而动态增长,而不是像数组那样固定不变。 而使用列表,从列表的开头删除内容并不是很有效,因此Queue在性能上击败了它们。 最后,键入.Enqueue()将对象添加到Queue中,.Dequeue()从Queue中删除对象,以及Peek()来查看下一个对象而不删除它,这是很好的。 它使工作变得更加轻松,并且您的代码更易于阅读。
因此,这是何时使用Queue的实际示例。 想象我们有一个小人物,我们想要移动到我们在屏幕上单击的每个位置。 首先,如果要使用Queue,则必须包含System.Collections.Generic命名空间,如此处顶部所示:
使用System.Collections.Generic;
使用UnityEngine;
CommandRobot类:MonoBehaviour
{
//这里我们初始化一个包含Vector3类型的队列
Queue positionTargets = new Queue ();
Vector3 mTarget;
公共无效Update()
{
//移动到当前目标位置
transform.position =
Vector3.MoveTowards(transform.position,mTarget,0.1f);
//检查是否达到目标,并且
//有一个后续目标
if(positionTargets.Count> 0 && transform.position == mTarget)
{
//出队下一个目标,并分配
//将其移至目标位置变量
mTarget = positionTargets.Dequeue();
}
//这里我们在Mousedown上添加了一个新目标
如果(Input.GetMouseButtonDown(0))
{
//做一些事情以获得点击的世界排名
Vector3 newPos =
Camera.main.ScreenToWorldPoint(Input.mousePosition);
newPos.z = 0;
//添加新对象就像.Enqueue(thingToAdd)一样简单!
positionTargets.Enqueue(newPos);
}
}
}
内森·约翰(Nathan John)是一名独立开发人员,目前在 WarpBall上 工作, 并开设了 Instant Game Coder 课程 (本文 最初发布 于此 )