// Update is called once per frame
    void Update()
    {
        // 运行shader
        Dispatch();

        // 根据Shader返回的buffer数据更新物体信息
        PBuffer[] values = new PBuffer[count];
        buffer.GetData(values);
        bool reborn = false;

        for (int i = 0; i < count; i++)
        {
            if (values [i].life < 0)
            {
                InitStruct(ref values [i]);
                reborn = true;
            }
            else
            {
                pool [i].transform.position    = values [i].pos;
                pool [i].transform.localScale  = values [i].scale;
                pool [i].transform.eulerAngles = values [i].eulerAngle;
                //pool [i].GetComponent<</span>MeshRenderer>().material.SetColor ("_TintColor", new Color(1,1,1,values [i].life));
            }
        }
        if (reborn)
        {
            buffer.SetData(values);
        }
    }
 void InitStruct(ref PBuffer m)
 {
     m.life       = Random.Range(1f, 3f);
     m.pos        = Random.insideUnitSphere * 5f;
     m.scale      = Vector3.one * Random.Range(0.3f, 1f);
     m.eulerAngle = new Vector3(0, Random.Range(0f, 180f), 0);
 }
Exemplo n.º 3
0
    private void Update()
    {
        Dispatch();

        PBuffer[] values = new PBuffer[count];
        buffer.GetData(values);
        bool reborn = false;

        for (int i = 0; i < count; i++)
        {
            if (values[i].life < 0)
            {
                InitStruct(ref values[i]);
                reborn = true;
            }
            else
            {
                pool[i].transform.position    = values[i].pos;
                pool[i].transform.localScale  = values[i].scale;
                pool[i].transform.eulerAngles = values[i].eulerAngle;
            }
        }
        if (reborn)
        {
            buffer.SetData(values);
        }
    }
Exemplo n.º 4
0
 void CreateBuffer()
 {
     buffer = new ComputeBuffer(count, 40);  //40是字节数
     PBuffer[] values = new PBuffer[count];
     for (int i = 0; i < count; i++)
     {
         PBuffer m = new PBuffer();
         InitStruct(ref m);
         values[i] = m;
     }
     buffer.SetData(values);
 }
Exemplo n.º 5
0
        //public void dataReceiveInit(int size) {
        //    this.SizeReceive = size;

        //    DataReceive = new int[size + 1];
        //    for (int i = 1; i <= size; ++i)
        //        DataReceive[i] = 0;
        //}

        //public bool isReceiveComplete() {
        //    bool f = true;
        //    for (int i = 1; i <= SizeReceive; ++i)
        //        if (DataReceive[i] == 0) {
        //            f = false;
        //            break;
        //        }
        //    return f;
        //}

        public override string ToString()
        {
            string rstr = "------Sensor node: " + Id + "\nNumOfReceive: " + NumOfReceive
                          + "\nPre-Buffer: (P="
                          + PBuffer.Count()
                          + ", Q="
                          + SBuffer.Count()
                          + ") [";

            int       c = PBuffer.Count;
            NetPacket k;

            while (c > 0)
            {
                k     = PBuffer.Dequeue();
                rstr += " [" + k.FromId + "#" + k.ToId + "#" + k.Data + "]";
                PBuffer.Enqueue(k);
                c--;
            }
            rstr += "]";


            rstr += "\nPost-Buffer: [";

            c = SBuffer.Count;
            while (c > 0)
            {
                k     = SBuffer.Dequeue();
                rstr += " [" + k.FromId + "#" + k.ToId + "#" + k.Data + "]";
                SBuffer.Enqueue(k);
                c--;
            }
            rstr += "]";

            return(rstr);
        }
Exemplo n.º 6
0
 public void reset()
 {
     PBuffer.Clear();
     SBuffer.Clear();
     NumOfReceive = 0;
 }