gpt4 book ai didi

c# - 使用 Transform 属性移动和旋转 LineRenderer

转载 作者:行者123 更新时间:2023-11-30 15:17:07 26 4
gpt4 key购买 nike

您可以使用 Transform 属性在 Unity 中旋转任何可视对象。一个异常(exception)是 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 从 Transform 属性旋转?

下图显示了 LineRenderer 在有和没有上述脚本的情况下的行为。位置现在可以使用上面启用的脚本,但旋转不是。

最佳答案

您可以使用转换的 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);
}

关于c# - 使用 Transform 属性移动和旋转 LineRenderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47234376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com