- UI用
- 效果图
- UI代码示例
- 挂载示例
- 世界坐标用
- 挂载示例
- 效果图
- 世界坐标代码示例
我们分两种情况,一种是UI上连线,一种是世界坐标下连线。
UI用 效果图 UI代码示例public class DrawLine : MonoBehaviour
{
[Header("Point")]
public RectTransform startPoint;//起始点,UI用
public RectTransform endPoint;//终点,UI用
public GameObject linePrefab;//一个空物体下挂一个SpriteRender就行了
public float lineWidth;//线的宽度
private GameObject m_line;//线的实例
private RectTransform m_rect;
private RectTransform m_lineRect;
private void Awake()
{
m_rect = GetComponent();
}
private void Start()
{
m_line = CreateLine(m_rect.anchoredPosition, endPoint.anchoredPosition);
//下方UI要加,世界坐标下不需要
//不明白函数意思看文档,作用是防止线段遮挡视野(层级不同可能会遮挡)
m_line.transform.SetAsFirstSibling();
}
private void Update()
{
DrawStraightLine(m_line, m_rect.anchoredPosition, endPoint.anchoredPosition);
}
///
/// 创建一条两点之间的线
///
/// 起始点
/// 结束点
public GameObject CreateLine(Vector2 startPoint, Vector2 endPoint)
{
GameObject line = Instantiate(linePrefab, transform.parent);
m_lineRect = line.GetComponent();
return line;
}
//划线功能
private void DrawStraightLine(GameObject line, Vector2 a, Vector2 b)
{
float distance = Vector2.Distance(a, b); //求距离
float angle = Vector2.SignedAngle(a - b, Vector2.left); //求夹角
line.GetComponent().anchoredPosition = (a + b) / 2;
line.GetComponent().sizeDelta = new Vector2(distance, lineWidth); //长度,宽度
line.transform.localRotation = Quaternion.AngleAxis(-angle, Vector3.forward);
}
}
挂载示例
世界坐标用
挂载示例
简单一点的方法是直接用Unity自带的Line Renderer
在一个游戏对象上挂载Line Renderer
public class LineRendererText : MonoBehaviour
{
public Transform startPoint;
public Transform endPoint;
private LineRenderer m_lineRenderer;
private void Awake()
{
m_lineRenderer = GetComponent();
}
private void Update()
{
m_lineRenderer.SetPosition(0, startPoint.position);
m_lineRenderer.SetPosition(1, endPoint.position);
}
}



