using UnityEngine;
public class MeshBender : MonoBehaviour
{
public float coeff; // алхимический коэффициент, заменяет параметр радиуса кривизны
public Vector3 angle; // алхимический коэффициент, задает представление об осевых поворотах
public Vector3 center; // вроде как должен быть центр кручения в локальных координатах меша
private Transform t;
private Mesh m;
private Vector3[] baseVertices; // здесь храним начальную вертексдату
private Vector3[] resultVertices; // сюда считаем вертексдату кручения
void Start()
{
t = transform;
m = t.GetComponent<MeshFilter>().mesh;
baseVertices = m.vertices;
resultVertices = new Vector3[baseVertices.Length];
}
void Update () {
for (int i = 0; i < baseVertices.Length; i++)
{
// угол закручивания веркекса под алхимическим коэффициентом
Quaternion rotation = Quaternion.Euler(angle.x * coeff * i, angle.y * coeff * i, angle.z * coeff * i);
// находим позицию закрученного вертекса
resultVertices[i] = center + rotation*(baseVertices[i] - center);
}
m.vertices = resultVertices;
}
}