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 framevoid 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);}
}