private void OnValidate() { if (path == null) { return; } for (int i = 0; i < pathAlignObjects.Length; i++) { PathAlignObject pao = pathAlignObjects[i]; if (pao.transform != null) { Vector3 position = path.GetPoint(pao.alpha); Vector3 direction = path.GetDirection(pao.alpha); Vector3 normal = path.GetNormal(pao.alpha); pao.transform.position = position + Quaternion.AngleAxis(pao.offsetAngle, direction) * (normal * pao.offset); Quaternion lookRot = Quaternion.identity; if (pao.alignDirection == AlignDirection.ZForward) { lookRot = Quaternion.AngleAxis(pao.rotAngle, direction) * Quaternion.LookRotation(direction, normal); } else { lookRot = Quaternion.AngleAxis(pao.rotAngle, direction) * Quaternion.LookRotation(normal, direction); } pao.transform.rotation = lookRot; } } }
private void AddEdgeLoop(float iter, int numIter, Vector3?forwardOverride = null) { Vector3 point = path.GetPoint(iter); Vector3 forward = path.GetDirection(iter); if (forwardOverride.HasValue) { forward = forwardOverride.Value; } Vector3 right = path.GetNormal(iter); Vector3 up = Vector3.Cross(forward, right).normalized; right = Vector3.Cross(up, forward).normalized; float yAlpha = dists[numIter] / pathLength; if (float.IsNaN(yAlpha)) { yAlpha = 0f; } Color color = Color.black; if (colorVerts) { color = colorGradient.Evaluate(yAlpha); } float widthMod = 1f; if (variableWidth) { widthMod = widthCurve.Evaluate(yAlpha); } int numVerts = verts.Count; int startNum = (subdivisions + 1) * numIter; for (int i = startNum; i <= startNum + subdivisions; i++) { float xAlpha = (i - startNum) / (float)subdivisions; Vector3 offset = right * Mathf.Cos(xAlpha * LuckshotMath.TAU) + up * Mathf.Sin(xAlpha * LuckshotMath.TAU); Vector3 vert = point + offset * path.Radius * widthMod; verts.Add(transform.InverseTransformPoint(vert)); normals.Add(transform.InverseTransformVector(offset)); uvs.Add(new Vector2(xAlpha, dists[numIter])); if (colorVerts) { colors.Add(color); } if (numIter == 0) { if (i > startNum) { indices.Add(0); indices.Add(i + 1); indices.Add(i); } } else { if (iter == fillAmount) { if (i > startNum) { indices.Add(i); indices.Add(i + 1); indices.Add(startNum + (subdivisions + 1) + 1); } } if (i > startNum) { indices.Add(i + 1); indices.Add(i); indices.Add(i - (subdivisions + 1)); indices.Add(i + 1 - (subdivisions + 1)); indices.Add(i + 1); indices.Add(i - (subdivisions + 1)); } } } }