◄ Unity 『功能总结』►——两点之间连接线段并保持

1.创建场景需要的物体

1.首先创建3个Image
Canvas的Resolution设置
在这里插入图片描述
在这里插入图片描述

2.开始配置位置和定位

2.将Line放到Start里面并居中,调节Line的Pivot
在这里插入图片描述

3.最终效果展示

3.重点来了 放置脚本 并赋值
在这里插入图片描述
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class LineMovewithendpos : MonoBehaviour {
	public Color Lincolor;
	public int LineHeight;
	public RectTransform Line;
	public Transform startpos;
	public Transform endpos;
	void Start () {
	}
	// Update is called once per frame
	void Update () {
		
		Line.GetComponent<Image>().color = Lincolor;
		Line.sizeDelta = new Vector2(Line.sizeDelta.x, LineHeight);


		Line.sizeDelta = new Vector2((startpos.position - endpos.position).magnitude , LineHeight);
		Line.transform.rotation = Quaternion.Euler(0, 0, angle_360(endpos.position, startpos.position));
	}

	float angle_360(Vector3 from_, Vector3 to_)
	{
		//两点的x、y值
		float x = from_.x - to_.x;
		float y = from_.y - to_.y;

		//斜边长度
		float hypotenuse = Mathf.Sqrt(Mathf.Pow(x, 2f) + Mathf.Pow(y, 2f));

		//求出弧度
		float cos = x / hypotenuse;
		float radian = Mathf.Acos(cos);

		//用弧度算出角度    
		float angle = 180 / (Mathf.PI / radian);

		if (y < 0)
		{
			angle = -angle;
		}
		else if ((y == 0) && (x < 0))
		{
			angle = 180;
		}
		return angle;
	}
}


出现分辨率问题

但是有个问题是根据屏幕分辨率不同,导致线段无法过长或过短
【2560X1440】
在这里插入图片描述
【1024X768】
在这里插入图片描述
计算分辨率屏幕长度计算为
屏幕分辨率.width/1920 为倍数
这里只精准到了后2位,如果计算更加精细 就多加0

	float count = 1 ;
	count = (float)(UnityEngine.Screen.width*1000/1920)/1000;

完整代码:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class LineMovewithendpos : MonoBehaviour {
	public Color Lincolor;
	public int LineHeight;
	public RectTransform Line;
	public Transform startpos;
	public Transform endpos;
	void Start () {
	}
	// Update is called once per frame
	void Update()
	{

		Line.GetComponent<Image>().color = Lincolor;
		Line.sizeDelta = new Vector2(Line.sizeDelta.x, LineHeight);

		float count = 1;
		count = (float)(UnityEngine.Screen.width * 1000 / 1920) / 1000;

		Line.sizeDelta = new Vector2((startpos.position - endpos.position).magnitude / count, LineHeight);
		Line.transform.rotation = Quaternion.Euler(0, 0, angle_360(endpos.position, startpos.position));
	}

	float angle_360(Vector3 from_, Vector3 to_)
	{
		//两点的x、y值
		float x = from_.x - to_.x;
		float y = from_.y - to_.y;

		//斜边长度
		float hypotenuse = Mathf.Sqrt(Mathf.Pow(x, 2f) + Mathf.Pow(y, 2f));

		//求出弧度
		float cos = x / hypotenuse;
		float radian = Mathf.Acos(cos);

		//用弧度算出角度    
		float angle = 180 / (Mathf.PI / radian);

		if (y < 0)
		{
			angle = -angle;
		}
		else if ((y == 0) && (x < 0))
		{
			angle = 180;
		}
		return angle;
	}
}

在这里插入图片描述
大功告成!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要在Unity中画出两个坐标点之间的连线并计算出连线的长度,可以按照以下步骤进行操作: 1. 创建两个游戏对象,分别表示两个坐标点,可以使用Unity中的Cube等基本形状来表示。 2. 在Unity中创建一个空的游戏对象,作为连线的父节点。 3. 创建一个Line Renderer组件并将其添加到父节点上,这个组件可以用来绘制线条。 4. 在Line Renderer组件中设置材质和颜色,可以让线条更加美观。 5. 在代码中获取两个坐标点的位置信息,并将其赋值给Line Renderer组件的起点和终点属性。 6. 计算出两个坐标点之间的距离,可以使用Vector3.Distance方法来计算。 代码示例: ```csharp using UnityEngine; public class DrawLine : MonoBehaviour { public GameObject pointA; public GameObject pointB; private LineRenderer lineRenderer; void Start() { lineRenderer = gameObject.AddComponent<LineRenderer>(); lineRenderer.material = new Material(Shader.Find("Sprites/Default")); lineRenderer.startColor = Color.red; lineRenderer.endColor = Color.yellow; lineRenderer.startWidth = 0.1f; lineRenderer.endWidth = 0.1f; lineRenderer.positionCount = 2; lineRenderer.SetPosition(0, pointA.transform.position); lineRenderer.SetPosition(1, pointB.transform.position); float distance = Vector3.Distance(pointA.transform.position, pointB.transform.position); Debug.Log("Distance between two points: " + distance); } } ``` 在上面的示例中,我们创建了两个Cube游戏对象pointA和pointB,并将它们的位置信息赋值给Line Renderer组件的起点和终点属性。然后使用Vector3.Distance方法计算出两个坐标点之间的距离,并输出到控制台中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

臭臭~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值