Unity 根据点位生成LineRender的围墙、或是实体围墙。

Unity 根据点位生成LineRender的围墙、或是实体围墙。

原理:
LineRender 各个点位互连,调整大小材质。
实体围墙:Cube 111,如果每2个点之间生成一个长度为2点之间的距离,宽度不变,高度为围墙高度72,则会生成为一组封闭的围墙,给这个cube上一个想要的材质即可。
代码如下:

		    public List<Vector3> vector3s = new List<Vector3>();
		    public LineRenderer lineRenderer = new LineRenderer();
		    public GameObject cube;
			public void DrawLineAndWallMode(){
	            if (lineRenderer != null)
	            {
	                lineRenderer.positionCount = vector3s.Count;
	                lineRenderer.loop = true;
	            }
	            for (int i = 0; i < vector3s.Count; i++)
	            {
	                int nextIndex = i + 1;
	
	                if (nextIndex < vector3s.Count)
	                {
	                    Vector3 start = vector3s[i];
	                    Vector3 end = vector3s[nextIndex];
	                    CreateTransform(cube, start, end);
	
	                }
	            }
	            CreateTransform(cube, vector3s[vector3s.Count - 1], vector3s[0]);
            }
            
            public void CreateTransform(GameObject obj, Vector3 start, Vector3 end)
		    {
		        GameObject temp = GameObject.Instantiate(obj, transform);
		        gos.Add(temp);
		        temp.gameObject.SetActive(true);
		        float distance = Vector3.Distance(start, end);
		        temp.transform.localPosition = start + (end - start) / 2;
		        temp.transform.localScale = new Vector3(distance, 72f, 1f);
		        SetTransformSize(temp, start, end);
		    }

		    public void SetTransformSize(GameObject target, Vector3 start, Vector3 end)
		    {
		        Vector3 direction = end - start;
		        Quaternion rotation = Quaternion.LookRotation(direction, Vector3.up);
		        target.transform.rotation = rotation;
		    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值