将LineRenderer的长度旋转到GameObject处停止

时间:2018-01-03 18:06:00

标签: c# unity3d unity5 raycasting

我试图让LineRender与GameObject一起旋转。我希望它从它的父GameObject的中心开始并延伸直到它遇到另一个GameObject。就像你站在一个房间里四处转动时激光指示器的工作原理非常相似。

enter image description here

下面的代码半工作,因为它在旋转时向LineRenderer的任何GameObject的中心发射RayCast2D。所以它跳了起来。这是上图中的示例C红线。

此外,我的“墙”位于Unity tilemap中,标签为“block”,因此唯一有效返回TileMap Collider 2D的对象是tile图块之外的对象。墙上附有private LineRenderer lineRenderer; private int xRot = 0; private void Awake() { lineRenderer = GetComponent<LineRenderer>(); if (lineRenderer != null) { lineRenderer.transform.position = new Vector3(transform.position.x, transform.position.y, -3); // Put this higher up so the camera can see lineRenderer.startWidth = 0.2f; lineRenderer.endWidth = 0.2f; lineRenderer.useWorldSpace = true; lineRenderer.SetPosition(0, transform.position); } } private void void Update() { transform.rotation = Quaternion.Euler(0, 0, xRot); xRot++; xRot = (int)Mathf.Repeat(xRot, 360); Debug.DrawRay(transform.position, transform.up * 10, Color.red); RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.TransformPoint(Vector2.up)); var distance = GetDistance(transform.position, hit.collider.transform.position); Vector3 endPos = transform.position + (hit.collider.transform.position.normalized * distance); lineRenderer.SetPosition(1, endPos); } 个。

A行和B行代表了我想要发生的事情。但是,没有出现在墙上的那些都在瓷砖地图中。

有任何帮助吗?

NaN

1 个答案:

答案 0 :(得分:1)

要固定激光跳跃,而不是使用对撞机的位置,您可以使用光线投射击中对撞机的point

RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.TransformPoint(Vector2.up));

if (hit.collider != null && hit.collider.tag == "block")
{
    Vector3 endPos = hit.point;
    lineRenderer.SetPosition(1, endPos);
}

我还没有使用过瓷砖地图,但根据unity documentation,TileMap对撞机应该和普通对撞机一样工作。