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

问题描述 投票:0回答:1

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

enter image description here

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

此外,我的“墙”位于Unity tilemap中,标签为“block”,因此唯一有效返回RayCast2D的对象是tile图块之外的对象。墙壁确实附有TileMap Collider 2D

A行和B行代表了我想要发生的事情。但是,那些没有显示为墙壁的瓷砖地图。

有帮助吗?

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);
    }
c# unity3d unity5 raycasting
1个回答
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);
}

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

© www.soinside.com 2019 - 2024. All rights reserved.