栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity物体跟随鼠标移动

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity物体跟随鼠标移动

        刚开始在将鼠标点转换为世界坐标时,我以为可以直接使用Unity的Camera.main.ScreenToWorldPoint( Input.mousePosition ) 就完事了,事实证明我想的太简单了。在我们使用这个API将鼠标屏幕点(Screen)转换成世界坐标(World)的时候,因为鼠标点z值的原因,直接使用的话得到的永远是一个固定值(Camera.main 的世界坐标),所以我们需要将鼠标点进行一个修正。

鼠标点直接转换为世界坐标
摄像机坐标

        处理的方法:

1.我们将需要跟随鼠标移动物体的世界坐标转换为屏幕坐标(World→Screen)。

//将目标物体的世界坐标转换成屏幕坐标
Vector3 targetScreenPos = Camera.main.WorldToScreenPoint(target.transform.position);

2.然后将转换后的 z值传给鼠标坐标,修正鼠标坐标。

//修正后的鼠标坐标
Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, targetScreenPos.z);

3.现在就可以把修正后的mousePos转换为世界坐标了

//将修正后的鼠标位置  转换为世界坐标
Vector3 mouseSToW = Camera.main.ScreenToWorldPoint(mousePos);

完整代码:

    //鼠标按下时 鼠标点的位置
    Vector3 mouseStartMovePos;
    //鼠标按下时 target的位置
    Vector3 targetStartMovePos;
    private void FollowMove()
    {
        //将 target世界坐标转换成屏幕坐标
        Vector3 targetScreenPos = Camera.main.WorldToScreenPoint(target.transform.position);
        //修正鼠标点的坐标
        Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, targetScreenPos.z);
        //将 修正后的鼠标点 转换成世界坐标
        Vector3 mouseSToW = Camera.main.ScreenToWorldPoint(mousePos);

        //鼠标按下时记录 鼠标点的位置 和 target的位置
        if (Input.GetMouseButtonDown(0))
        {
            mouseStartMovePos = mouseSToW ;
            targetStartMovePos = target.transform.position;
        }
        //跟随移动,加上偏移
        if (Input.GetMouseButton(0))
        {
            target.transform.position = targetStartMovePos + mouseSToW - mouseStartMovePos;
        }
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901563.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号