Unity 三维场景中动态添加矩形框

前段时间项目有个需求,要在三维场景中动态添加矩形框标记区域块,研究了下,搞定了在三维场景中画矩形框,后来这个需求不需要了也就没继续下去了,在此纪录下如何在三维场景中画矩形吧。效果如下;

 首先确定画线使用LineRenderer,在Start方法里设置LineRenderer的属性;

void Start(){
        lineRenderer = GetComponent<LineRenderer>();
        lineRenderer.positionCount = 0; // 初始化顶点数
        lineRenderer.material.color = Color.black; // 设置线颜色
        lineRenderer.startWidth = 0.1f;
    }

在三维场景中添加一个带碰撞器的Quad充当画布,并将它的位置转化为二维空间的坐标;

public Transform canvasGO;
private Vector3 canvasGOScreenPos;


 void Start()
    {
        lineRenderer = GetComponent<LineRenderer>();
        lineRenderer.positionCount = 0; // 初始化顶点数
        lineRenderer.material.color = Color.black; // 设置线颜色
        lineRenderer.startWidth = 0.1f;

        canvasGOScreenPos = Camera.main.WorldToScreenPoint(canvasGO.transform.position);
    }

加下来在Update方法中添加画矩形的代码;

void Update()
{
    if (Input.GetMouseButtonDown(0) && mouseDown==false) // 检测鼠标左键是否按下
        {
            lineRenderer.positionCount = 0; // 重置顶点数
            vertexCount = 0; // 重置顶点计数器
            mouseDown = true; // 标记鼠标按下

            startPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, canvasGOScreenPos.z-0.1f);
            startPos = Camera.main.ScreenToWorldPoint(startPos);
        }

        if (Input.GetMouseButtonUp(0)) // 检测鼠标左键是否松开
        {
            mouseDown = false; // 标记鼠标松开
        }

        if(mouseDown)
        {
            endPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, canvasGOScreenPos.z - 0.1f);
            endPos = Camera.main.ScreenToWorldPoint(endPos);

            Vector3 pos2 = new Vector3(endPos.x, endPos.y, startPos.z);
            Vector3 pos4 = new Vector3(startPos.x, endPos.y, endPos.z);

            Vector3[] tempPoints = new Vector3[4] { startPos,pos2,endPos,pos4  };
            lineRenderer.positionCount = 4;
            lineRenderer.SetPositions(tempPoints);
        }

}

这样就可以了,完整代码如下;

public Transform canvasGO;
private Vector3 canvasGOScreenPos;

private LineRenderer lineRenderer;

private int vertexCount = 0; // 顶点数计数器
private bool mouseDown = false; // 鼠标状态标记
private Vector3 startPos;
private Vector3 endPos;

void Start()
{
    lineRenderer = GetComponent<LineRenderer>();
    lineRenderer.positionCount = 0; // 初始化顶点数
    lineRenderer.material.color = Color.black; // 设置线颜色
    lineRenderer.startWidth = 0.1f;

    canvasGOScreenPos = Camera.main.WorldToScreenPoint(canvasGO.transform.position);
}

void Update()
{
     if (Input.GetMouseButtonDown(0) && mouseDown==false) // 检测鼠标左键是否按下
        {
            lineRenderer.positionCount = 0; // 重置顶点数
            vertexCount = 0; // 重置顶点计数器
            mouseDown = true; // 标记鼠标按下

            startPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, canvasGOScreenPos.z-0.1f);
            startPos = Camera.main.ScreenToWorldPoint(startPos);
        }

        if (Input.GetMouseButtonUp(0)) // 检测鼠标左键是否松开
        {
            mouseDown = false; // 标记鼠标松开
        }

        if(mouseDown)
        {
            endPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, canvasGOScreenPos.z - 0.1f);
            endPos = Camera.main.ScreenToWorldPoint(endPos);

            Vector3 pos2 = new Vector3(endPos.x, endPos.y, startPos.z);
            Vector3 pos4 = new Vector3(startPos.x, endPos.y, endPos.z);

            Vector3[] tempPoints = new Vector3[4] { startPos,pos2,endPos,pos4  };
            lineRenderer.positionCount = 4;
            lineRenderer.SetPositions(tempPoints);
        }
}

有用的话帮忙点个赞呗!

转载请明出处Unity 三维场景中动态添加矩形框_俯首甘为孺子_刘的博客-CSDN博客如何在Unity 三维场景中动态添加矩形框。https://blog.csdn.net/enjoySoledad/article/details/132257520?spm=1001.2014.3001.5501

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值