// 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); }
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); } }
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); }
//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); }
public void reset() { PBuffer.Clear(); SBuffer.Clear(); NumOfReceive = 0; }