gpt4 book ai didi

unity-game-engine - 获取线渲染器在移动和旋转线时的位置

转载 作者:行者123 更新时间:2023-12-02 09:35:22 25 4
gpt4 key购买 nike

我有一 strip 有线条渲染器的线条。 用户可以移动线条并旋转它。如何获取已移动或旋转的线条渲染器的新位置?由于线渲染器的顶点坐标没有改变,只是线对象整体的位置和旋转发生了变化。

ScreenShot of line object

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

最佳答案

LineRenderer unity 获取一个点列表(存储为 Vector3 s)并通过它们画一条线。它以两种方式之一执行此操作。

  1. 局部空间:(默认)所有点都相对于转换。因此,如果您的游戏对象移动或旋转,该线将还可以移动和旋转。

  2. 世界空间:(您需要选中“使用世界空间” 复选框)该线将呈现在图像中的固定位置 与列表中的位置完全匹配的世界。如果 游戏对象移动或旋转,线不变

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

这个常见用例是通过游戏对象转换上的方法来解决的

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

关于unity-game-engine - 获取线渲染器在移动和旋转线时的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51478261/

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