【发布时间】:2017-11-11 04:33:34
【问题描述】:
您可以使用 Transform 属性在 Unity 中旋转任何视觉对象。 LineRenderer 是一个例外。您不能使用 transform 属性移动或旋转它。
LineRenderer 使用SetPosition 或SetPositions 函数移动,所以我managed 通过变换位置属性使其可移动,但我不能让它也旋转。
以下是我用来使其可移动的代码。
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<LineRenderer>();
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 在使用和不使用上述脚本的情况下的行为。位置现在可以使用上面启用的脚本,但没有旋转。
【问题讨论】:
-
我对 Unity 不熟悉,但有人会想到类似
newBeginPos = transform.rotation * newBeginPos? -
不。有一个
GetPosition函数我曾经获得该职位现在我正在寻找不存在的GetRotation函数。至于您的建议,它不应该起作用,因为您需要 LineRenderer 的旋转和它所附加的 GameObject 以获得旋转的偏移量。现在,您只是将这个 GameObject 的位置和旋转相乘。我也试过了,它只会让 LineRenderer 消失。 -
我能想到但可能行不通的方法是拥有 2 个空游戏对象(linerenderer 的子对象),在线渲染器的每一端各一个,使用线渲染器的变换旋转旋转这些对象,然后然后将这些游戏对象位置应用到线渲染器末端。
-
好建议。我会试试看的。