我有一条连接了线渲染器的线。 用户可以移动线条并旋转线条。如何获取已移动或旋转的线条渲染器的新位置?由于线渲染器的顶点坐标不变,因此线对象整体的位置和旋转都不会改变。
图像底部的位置在移动或旋转时不会改变。这些位置由getpositions()方法返回,这在我的情况下没有用。
答案 0 :(得分:3)
统一的LineRenderer获取一个点列表(存储为Vector3),并在它们之间画一条线。它以两种方式之一来完成此操作。
本地空间 :(默认)所有点都相对于 转变。因此,如果您的GameObject移动或旋转,则直线 也可以旋转。
世界空间 :(您需要选中“使用世界空间” 复选框)线将在 与列表中的排名完全匹配的世界。如果 gameObject移动或旋转,线条将保持不变
所以你真正想知道的是 “如何获取行中局部空间点的世界空间位置?”
这种常见用例通过gameObjects变换上的方法解决了
它需要一个局部空间点(这是默认情况下数据存储在线条渲染器中的方式)并将其转换为世界空间。
示例:
using UnityEngine;
using System.Collections;
public class LineRendererToWorldSpace : MonoBehaviour
{
private LineRenderer lr;
void Start()
{
lr = GetComponent<LineRenderer>();
// Set some positions in the line renderer which are interpreted as local space
// These are what you would see in the inspector in Unity's UI
Vector3[] positions = new Vector3[3];
positions[0] = new Vector3(-2.0f, -2.0f, 0.0f);
positions[1] = new Vector3(0.0f, 2.0f, 0.0f);
positions[2] = new Vector3(2.0f, -2.0f, 0.0f);
lr.positionCount = positions.Length;
lr.SetPositions(positions);
}
Vector3[] GetLinePointsInWorldSpace()
{
Vector3[] positions;
//Get the positions which are shown in the inspector
var numberOfPositions = lr.GetPositions(positions);
//Iterate through all points, and transform them to world space
for(var i = 0; i < numberOfPositions; i += 1)
{
positions[i] = transform.TransformPoint(positions[i]);
}
//the points returned are in world space
return positions;
}
}
该代码仅用于演示目的,因为我不确定该用例。 另外,我的链接是2018.2,它是unity的最新版本,但是使用的逻辑和方法应该非常相似。