unity 物体跟随鼠标在地面移动

// ========================================================
// 功能描述:跟随鼠标在地面移动
// 作者:王鑫伟 
// 创建时间: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;
    }
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值