代码之家  ›  专栏  ›  技术社区  ›  user-44651

旋转线条渲染器的长度以在GameObject处停止

  •  0
  • user-44651  · 技术社区  · 7 年前

    我正在尝试让LineRender与游戏对象一起旋转。我希望它从其父游戏对象的中心开始,一直延伸到遇到另一个游戏对象。就像你站在房间里旋转时激光指针的工作原理一样。

    enter image description here

    下面的代码半工作原理是 LineRenderer 到任何 GameObject 当它旋转时。所以它跳了起来。这是上图中的示例C红线。

    此外,我的“墙”位于带有“block”标记的统一tilemap中,因此只有返回到 RayCast2D 是在平铺贴图之外的。墙壁确实有 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);
        }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   ryeMoss    7 年前

    要修复激光的跳跃,可以使用 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碰撞器的工作方式应与普通碰撞器相同。