拖尾的簡單實現
今天看到一個題目發現沒做過拖尾,簡單寫一下。
思路:
1.使用兩個子物體的Transform指示拖尾軌跡的兩端
2.每秒採樣當前的偏移,然後將頂點依次順延並添加該偏移值
3.重建Mesh
代碼如下:
void Start()n{n mesh = new Mesh();n mf = GetComponent<MeshFilter>();n mr = GetComponent<MeshRenderer>();n meshVertices = new List<Vector3>();n meshUvs = new List<Vector2>();n triangles = new List<int>();n meshColors = new List<Color>();n //把點分配好n // 0 2 4 8 10 .. (sampleCount-1)*2 ..sampleCount* 2n //n // 1 3 5 7 9 .. (sampleCount-1)*2+1 ..sampleCount*2+1n for (int i = 0; i < SampleCount; i++)n {n //需要雙面n triangles.Add(i * 2);n triangles.Add(i * 2 + 1);n triangles.Add(i * 2 + 3);n triangles.Add(i * 2);n triangles.Add(i * 2 + 3);n triangles.Add(i * 2 + 1);n triangles.Add(i * 2);n triangles.Add(i * 2 + 3);n triangles.Add(i * 2 + 2);n triangles.Add(i * 2);n triangles.Add(i * 2 + 2);n triangles.Add(i * 2 + 3);n }n //塞好頂點n for (int i = 0; i <= SampleCount; i++)n {n meshVertices.Add(Top.localPosition);n meshVertices.Add(Bottom.localPosition);n meshUvs.Add(new Vector2((float)i / SampleCount, 1));n meshUvs.Add(new Vector2((float)i / SampleCount, 0));n meshColors.Add(new Color((float)i / SampleCount, 1, 1));n meshColors.Add(new Color(1, 1, (float)i / SampleCount));n }n BuildNewMesh();n}nnvoid Update()n {n Vector3 move = lastPoint - transform.position;n for (int i = SampleCount - 1; i >= 0; i--)n {n meshVertices[i * 2 + 2] = meshVertices[i * 2] + move;n meshVertices[i * 2 + 3] = meshVertices[i * 2 + 1] + move;n }n meshVertices[0] = Top.localPosition;n meshVertices[1] = Bottom.localPosition;n lastPoint = transform.position;n BuildNewMesh();n mr.enabled = IsShow;n }n
至於BuildNewMesh,是一個很簡單的構造Mesh的過程,不再贅述。
推薦閱讀:
※Python爬蟲實戰入門二:從一個簡單的HTTP請求開始
※Fab Academy 第十六周:界面和應用編程
※Haskell 這段代碼該如何理解?
※設計師學編程?從五個思維訓練開始
※getter 和 setter 方法有什麼意義?