unity画线阻挡物体的小游戏

// 成员变量

public Canvas canvas;
public Material material;

private LineRenderer lr;
private PolygonCollider2D pc;

private Vector3 mousePos;
private bool mousePressing = false;
private List<Vector3> points = new List<Vector3>();
    // update方法

    void Update()
    {
        if (mousePressing)
        {
            Vector3 newPos;
            RectTransformUtility.ScreenPointToWorldPointInRectangle(canvas.GetComponent<RectTransform>(), Input.mousePosition, Camera.main, out newPos);
            if (Vector3.Distance(mousePos, newPos) > 0.3)
            {
                points.Add(newPos);
            }
        }
        if (!mousePressing && Input.GetMouseButtonDown(0))
        {
            GameObject gameObject = new GameObject();
            lr = gameObject.AddComponent<LineRenderer>();
            pc = gameObject.AddComponent<PolygonCollider2D>();
            mousePressing = true;
            mousePos = Input.mousePosition;
        }
        if (Input.GetMouseButtonUp(0))
        {
            mousePressing = false;
            lr.positionCount = points.Count;
            lr.SetPositions(points.ToArray());
            lr.material = material;
            List<Vector2> colliderPath = GetColliderPath();
            pc.SetPath(0, colliderPath.ToArray());
            points.Clear();
        }
    }

 

    // 给线加PolygonCollider碰撞体

    List<Vector2> GetColliderPath()
    {
        var colliderWidth = lr.startWidth;
        var points2 = new List<Vector2>();
        points2.Clear();
        for (int i = 0; i < points.Count; i++)
        {
            points2.Add(points[i]);
        }

        List<Vector2> edgePointList = new List<Vector2>();
        for (int j = 1; j < points2.Count; j++)
        {
            Vector2 distanceVector = points2[j - 1] - points2[j];
            Vector3 crossVector = Vector3.Cross(distanceVector, Vector3.forward);
            Vector2 offectVector = crossVector.normalized;
            Vector2 up = points2[j - 1] + 0.5f * colliderWidth * offectVector;
            Vector2 down = points2[j - 1] - 0.5f * colliderWidth * offectVector;
            edgePointList.Insert(0, down);
            edgePointList.Add(up);
            if (j == points2.Count - 1)
            {
                up = points2[j] + 0.5f * colliderWidth * offectVector;
                down = points2[j] - 0.5f * colliderWidth * offectVector;
                edgePointList.Insert(0, down);
                edgePointList.Add(up);
            }
        }
        return edgePointList;
    }

给LineRenderer加碰撞体是借鉴这位博主的代码

【Unity】根据LineRenderer形状给物体添加PolygonCollider2D碰撞体 - 萧然CS - 博客园 (cnblogs.com)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值