Unity常用数据结构Queue(队列)

今天搜索处理陀螺仪抖动问题方法时,看见有人使用Queue,顺便研究了一下。

//用平均值的方法平滑陀螺仪曲线,实现思想简单描述如下
Queue averageList;
averageList.Enqueue (Input.gyro.attitude);
if (averageList.Count > 240)
averageList.Dequeue ();
foreach (Quaternion singleRotation in averageList)
{
//分离,重组Quaternion,获得平均值averageRotation
}
//通过插值贴回给摄像头
transform.localRotation = Quaternion.Slerp(transform.localRotation, averageRotation, Time.deltaTime* 4f);

Queue的基本功能有插入、提取和检查操作。可以用来如排队,计时等线性相关的问题。

相关API可以参考MSDN,下面通过例子熟悉一下Unity中Queue相关的操作。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class QueueExample : MonoBehaviour
{
    public Queue queue;
    public Text queueCount;
    public Text queueContent;
    public Text queuePeek;

    void Start()
    {
        queue = new Queue();
    }

    void Update()
    {
        if (queue.Count > 0)
        {
            queuePeek.text = "queuePeek : " + queue.Peek().ToString();
        }
        else
        {
            queuePeek.text = "queuePeek : ";
        }

        //增加元素
        if (Input.GetKeyDown(KeyCode.A))
        {
            InsetTime();
            showQueue();
        }

        //减去元素
        if (Input.GetKeyDown(KeyCode.D))
        {
            if (queue.Count > 0)
            {
                Debug.Log(queue.Dequeue());
                showQueue();
            }
        }

        //清除队列所有元素
        if (Input.GetKeyDown(KeyCode.C))
        {
            queue.Clear();
            showQueue();
        }

        queueCount.text = "queueCount : " + queue.Count.ToString();
    }

    void InsetTime()
    {
        queue.Enqueue(Time.time);
    }

    void showQueue()
    {
        queueContent.text = "queueContent : ";
        foreach (float value in queue)
        {
            queueContent.text += value.ToString() + " | ";
        }
    }
}

通过插入,提取,检查,清除等操作了解queue的运行,结果如图。


案例下载



你可能感兴趣的:(unity3d)