Перемещение и поворот LineRenderer с помощью свойства Transform

Вы можете повернуть любой визуальный объект в Unity с помощью свойства Transform. Одним из исключений является LineRenderer . Вы не можете перемещать или поворачивать его с помощью свойства transform.

LineRenderer перемещается с помощью функции SetPosition или SetPositions поэтому мне удалось сделать ее подвижной по свойству позиции преобразования, но я не могу заставить ее вращаться.

Ниже приведен код, который я использую, чтобы сделать его подвижным.

 public Vector3 beginPos = new Vector3(-1.0f, -1.0f, 0); public Vector3 endPos = new Vector3(1.0f, 1.0f, 0); Vector3 beginPosOffset; Vector3 endPosOffset; LineRenderer diagLine; void Start() { diagLine = gameObject.AddComponent(); diagLine.material = new Material(Shader.Find("Sprites/Default")); diagLine.startColor = diagLine.endColor = Color.green; diagLine.startWidth = diagLine.endWidth = 0.15f; diagLine.SetPosition(0, beginPos); diagLine.SetPosition(1, endPos); //Get offset beginPosOffset = transform.position - diagLine.GetPosition(0); endPosOffset = transform.position - diagLine.GetPosition(1); } void Update() { //Calculate new postion with offset Vector3 newBeginPos = transform.position + beginPosOffset; Vector3 newEndPos = transform.position + endPosOffset; //Apply new position with offset diagLine.SetPosition(0, newBeginPos); diagLine.SetPosition(1, newEndPos); } 

Я попытался использовать тот же метод, который использовал, чтобы он мог вращаться, но я застрял на первом этапе получения смещения, потому что нет способа получить доступ к переменной вращения для LineRenderer но есть один для доступа к позиции GetPosition .

Как я могу получить поворот LineRenderer или как я могу также заставить LineRenderer быть повернутым из свойства Transform?

Ниже приведен образ, который показывает поведение LineRenderer с и без сценария выше. Позиция теперь работает со сценарием выше, но rotation нет.

Вы можете использовать localToWorldMatrix преобразования:

 void Start() { diagLine = gameObject.AddComponent(); diagLine.material = new Material(Shader.Find("Sprites/Default")); diagLine.startColor = diagLine.endColor = Color.green; diagLine.startWidth = diagLine.endWidth = 0.15f; diagLine.SetPosition(0, beginPos); diagLine.SetPosition(1, endPos); } void Update() { //Calculate new postion Vector3 newBeginPos = transform.localToWorldMatrix * new Vector4(beginPos.x, beginPos.y, beginPos.z, 1); Vector3 newEndPos = transform.localToWorldMatrix * new Vector4(endPos.x, endPos.y, endPos.z, 1); //Apply new position diagLine.SetPosition(0, newBeginPos); diagLine.SetPosition(1, newEndPos); }