使用Transform属性

时间:2017-11-11 04:33:34

标签: c# unity3d

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

使用LineRendererSetPosition函数移动

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

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

2 个答案:

答案 0 :(得分:3)

您可以使用转换的localToWorldMatrix

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);
}

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);
}

答案 1 :(得分:0)

您可以将LineRenderer的useWorldSpace属性设置为false,然后可以使用其转换组件来控制LineRenderer。

https://answers.unity.com/questions/39391/line-renderer-position.html