Unity实现连连看连线效果
1.一个比较简单的向量计算,用的LineRenderer实现;
已知起始A点和终点C点,求B点;
先计算A点到C点的向量取归一化当做方向,再给定一个“模长”(B点到A点的模长)乘以该方向,最后加上LineRenderer的自身坐标位置(即A点位置)转换到世界空间;
代码如下:
using System.Collections;
using System.Collections.Generic;
using Unity.Mathematics;
using Unity.VisualScripting;
using UnityEngine;
[ExecuteInEditMode]
public class LineEffects : MonoBehaviour
{
public Color LineCol = Color.white;
public GameObject A;
public GameObject c;
public GameObject Line;
private LineRenderer myLineRenderer;
[Range(0,0.1f)]public float LineWidth = 0.05f;
[Range(0,1)]public float MidDistance = 0.25f;
void Start()
{
myLineRenderer = Line.GetComponent<LineRenderer>();
}
// Update is called once per frame
void Update()
{
MidLenthMath();
}
public void MidLenthMath(){
myLineRenderer.startWidth = LineWidth;
myLineRenderer.endWidth = LineWidth;
//位置
Vector3 StartPos = A.transform.position - Line.transform.position;
Vector3 EndPos = c.transform.position - Line.transform.position;
//向量
Vector3 X = (c.transform.position - A.transform.position);
//求中间位置//这个是按照模长求的位置
X = X.normalized*MidDistance;
//求解中间B点位置
Vector3 B = new Vector3(0,0,0);
B = X + A.transform.position;
B = new Vector3(B.x,0,B.z);
myLineRenderer.SetPosition(0,StartPos);
myLineRenderer.SetPosition(1,B);
myLineRenderer.SetPosition(2,EndPos);
Material myLineMat = myLineRenderer.sharedMaterial;
myLineMat.SetColor("_UnlitColor",LineCol);
}
}