使用Transform属性移动和旋转LineRenderer

您可以使用Transform属性旋转Unity中的任何可视对象。 LineRenderer是一个例外。 您无法使用transform属性移动或旋转它。

使用SetPositionSetPositions函数移动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旋转或如何从Transform属性中旋转LineRenderer

下面的图片显示了LineRenderer的行为,包括和不包含上述脚本。 现在位置正在使用上面启用的脚本,但旋转不是。

您可以使用transform的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); }