平面"/>
Unity点投影到平面
点投影到平面
1
public Transform targetPlane;//目标平面public Transform projectPoint;//投影点public Vector3 normal = Vector3.up;void Update() {// Vector3 normal = targetPlane.up;// 上面是错误的!Vector3.up才是平面的法向量;(因为用的是相对位置;把平面当成(0,0,0)原点坐标系算的)Debug.Log(normal);var Worldpos = transform.position;var Localpos = targetPlane.InverseTransformPoint(Worldpos);//世界坐标转局部坐标(点到平面的相对位置)var dis = Vector3.Dot(Localpos, normal);//A与B点乘:A在B上的投影长度*B的长度; var vecN = normal * dis; var planepos = Localpos - vecN; projectPoint.position = targetPlane.TransformPoint(planepos); }
2
public Transform targetPlane;//目标平面public Transform projectPoint;//投影点void Update(){var worldpos = transform.position;var targetPlanePos = targetPlane.position;var normal = targetPlane.transform.up;var pos = PointToPlane(worldpos, targetPlanePos, normal);projectPoint.position = pos;}Vector3 PointToPlane(Vector3 worldpos, Vector3 targetPlanePos, Vector3 planeNormal){var localpos = worldpos - targetPlanePos;var dis = Vector3.Dot(localpos, planeNormal);var vecN = planeNormal * dis; return worldpos -vecN;}
更多推荐
Unity点投影到平面
发布评论