使用Transform属性移动和旋转LineRenderer
您可以使用Transform属性旋转Unity中的任何可视对象。 LineRenderer
是一个例外。 您无法使用transform属性移动或旋转它。
使用SetPosition
或SetPositions
函数移动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); }