void Update() { lodDrawer0.listPositionData.Clear(); lodDrawer1.listPositionData.Clear(); lodDrawer2.listPositionData.Clear(); lodDrawer3.listPositionData.Clear(); lodDrawer0.listRotationData.Clear(); lodDrawer1.listRotationData.Clear(); lodDrawer2.listRotationData.Clear(); lodDrawer3.listRotationData.Clear(); lodDrawer0.listTexturePositionData.Clear(); lodDrawer1.listTexturePositionData.Clear(); lodDrawer2.listTexturePositionData.Clear(); lodDrawer3.listTexturePositionData.Clear(); Vector3 CameraPosition = Camera.main.transform.position;; deltaTime += Time.deltaTime; for (int i = 0; i < formationList.Count; ++i) { Formation formation = formationList[i]; float distance = math.length(CameraPosition - formation.transform.position); Debug.Log("Dis: " + distance); for (int j = 0; j < formation.Count(); j++) { Vector3 center = formation.transform.position; Vector3 v3 = new Vector3(center.x + j % formation.width, 1, center.z + j / formation.width); V4 v4 = new V4(v3.x, v3.y, v3.z, 1); AnimationClipDataBaked clip = animationClipData[(int)0 * 25 + AnimationName.Attack1]; normalizedTime = normalizedTimeStart + deltaTime / clip.AnimationLength; normalizedTime = normalizedTime % 1.0f; float texturePosition = normalizedTime * clip.TextureRange + clip.TextureOffset; int lowerPixelInt = (int)math.floor(texturePosition * clip.TextureWidth); float lowerPixelCenter = (lowerPixelInt * 1.0f) / clip.TextureWidth; float upperPixelCenter = lowerPixelCenter + clip.OnePixelOffset; float lerpFactor = (texturePosition - lowerPixelCenter) / clip.OnePixelOffset; Vector3 texturePositionData = new Vector3(lowerPixelCenter, upperPixelCenter, lerpFactor); if (distance < bakedData.lods.Lod1Distance) { lodDrawer0.listPositionData.Add(v4); lodDrawer0.listRotationData.Add(Quaternion.LookRotation(new Vector3(0, UnityEngine.Random.Range(1, 50), 0), new Vector3(0.0f, 1, 0.0f))); lodDrawer0.listTexturePositionData.Add(texturePositionData); } else if (distance < bakedData.lods.Lod2Distance) { lodDrawer1.listPositionData.Add(v4); lodDrawer1.listRotationData.Add(Quaternion.LookRotation(new Vector3(0, UnityEngine.Random.Range(1, 50), 0), new Vector3(0.0f, 1, 0.0f))); lodDrawer1.listTexturePositionData.Add(texturePositionData); } else if (distance < bakedData.lods.Lod3Distance) { lodDrawer2.listPositionData.Add(v4); lodDrawer2.listRotationData.Add(Quaternion.LookRotation(new Vector3(0, UnityEngine.Random.Range(1, 50), 0), new Vector3(0.0f, 1, 0.0f))); lodDrawer2.listTexturePositionData.Add(texturePositionData); } else { lodDrawer3.listPositionData.Add(v4); lodDrawer3.listRotationData.Add(Quaternion.LookRotation(new Vector3(0, UnityEngine.Random.Range(1, 50), 0), new Vector3(0.0f, 1, 0.0f))); lodDrawer3.listTexturePositionData.Add(texturePositionData); } } } //for (int i = 0; i < formationList.Count * formationList[0].Count(); i++) //{ // lodDrawer0.listTexturePositionData.Add(texturePositionData); // lodDrawer1.listTexturePositionData.Add(texturePositionData); // lodDrawer2.listTexturePositionData.Add(texturePositionData); // lodDrawer3.listTexturePositionData.Add(texturePositionData); //} lodDrawer0.Draw(); lodDrawer1.Draw(); lodDrawer2.Draw(); lodDrawer3.Draw(); }