// ========================================================
// 功能描述:跟随鼠标在地面移动
// 作者:王鑫伟
// 创建时间:2019-10-11 13:48:30
// 版 本:1.0
// 其他: 挂载到需要跟随鼠标的物体
// ========================================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MouseTargetPoint : MonoBehaviour {
void Start () {
}
// Update is called once per frame
void Update () {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//获取直线
transform.position = GetIntersectWithLineAndPlane(ray.origin/*射线原点*/,ray.direction/*射线方向*/, Vector3.down/*在地面移动所以垂直于平面的的向量up,down都可以*/, Vector3.zero/*地面任意点*/);//计算目标点
}
/// <summary>
/// 计算直线与平面的交点
/// </summary>
/// <param name="point">直线上某一点</param>
/// <param name="direct">直线的方向</param>
/// <param name="planeNormal">垂直于平面的的向量</param>
/// <param name="planePoint">平面上的任意一点</param>
/// <returns></returns>
private Vector3 GetIntersectWithLineAndPlane(Vector3 point, Vector3 direct, Vector3 planeNormal, Vector3 planePoint)
{
float d = Vector3.Dot(planePoint - point, planeNormal) / Vector3.Dot(direct.normalized, planeNormal);
return d * direct.normalized + point;
}
}