【发布时间】:2021-10-24 05:06:56
【问题描述】:
我试图让敌人沿着确定的路线移动。 我认为合乎逻辑的解决方案是使用 LineRenderer,然后将本地坐标转换为世界坐标。
但老实说,我不知道该怎么做。
我希望它尊重旋转,因为能够执行这些可变路径真的很酷。
【问题讨论】:
标签: c# unity3d position transform
我试图让敌人沿着确定的路线移动。 我认为合乎逻辑的解决方案是使用 LineRenderer,然后将本地坐标转换为世界坐标。
但老实说,我不知道该怎么做。
我希望它尊重旋转,因为能够执行这些可变路径真的很酷。
【问题讨论】:
标签: c# unity3d position transform
如果您希望将本地坐标转换为世界坐标,您可以在代码中使用 GameObject 中的Transform 来转换您的坐标。
Transform 具有函数 Transform.TransformPoint(Vector3 position),它将使用 Transforms 的位置、旋转和缩放,返回世界空间中的新点。
Transform _transform;
Vector3 _originalVector = new Vector3( 1, 1, 1);
Vector3 _transformedVector = _transform.TransformPoint(_originalVector);
Vector3 _transformedVector 将是您在世界空间中寻找的位置。
【讨论】:
当然,您可以使用Transform.TransformPoint获取本地行位置并将它们全部转换为世界空间
将位置从局部空间转换到世界空间。
并遍历线的所有点
var amount = lineRenderer.GetPositions(out Vector3 [] points);
var worldPoints = new Vector3[amount];
for(var i = 0; i < amount; i++)
{
worldPoints[i] = lineRenderer.transform.TransformPoint(points[i]);
}
但是,为什么不直接启用LineRenderer.useWorldSpace 并立即使用世界空间坐标配置您的线?
如果启用,线条将在世界空间中定义。
这意味着对象的位置被忽略,线条围绕世界原点渲染。
【讨论】: