在移动和旋转线条时获取线条渲染器的位置

时间:2018-07-23 11:58:18

标签: unity3d geometry

我有一条连接了线渲染器的线。 用户可以移动线条并旋转线条。如何获取已移动或旋转的线条渲染器的新位置?由于线渲染器的顶点坐标不变,因此线对象整体的位置和旋转都不会改变。

ScreenShot of line object

图像底部的位置在移动或旋转时不会改变。这些位置由getpositions()方法返回,这在我的情况下没有用。

1 个答案:

答案 0 :(得分:3)

统一的LineRenderer获取一个点列表(存储为Vector3),并在它们之间画一条线。它以两种方式之一来完成此操作。

  1. 本地空间 :(默认)所有点都相对于 转变。因此,如果您的GameObject移动或旋转,则直线 也可以旋转。

  2. 世界空间 :(您需要选中“使用世界空间”     复选框)线将在     与列表中的排名完全匹配的世界。如果     gameObject移动或旋转,线条将保持不变

所以你真正想知道的是 “如何获取行中局部空间点的世界空间位置?”

这种常见用例通过gameObjects变换上的方法解决了

Transform.TransformPoint

它需要一个局部空间点(这是默认情况下数据存储在线条渲染器中的方式)并将其转换为世界空间。

示例:

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的最新版本,但是使用的逻辑和方法应该非常相似。