小地图标识和摄像机视角中心匹配

之前写过小地图功能以及拖拽大小功能https://blog.csdn.net/qq_30300405/article/details/88660207

本以为没有问题,位置匹配什么的都没有问题,但是当摄像机还是旋转时,问题出现了,标识图片位置匹配的位置是摄像机的位置,当摄像机角度不是正交角度也就是x为90度的时候,摄像机看到的画面就和小地图上标识的位置不一致了(因为这件事挨批了心里十分怨念)。

那么在那样解决呢?

后来看到一个博客让我找到了思路。http://www.xuanyusong.com/archives/3036

既然我能获取到视口范围了,那么我也同样能获取到视口中心点了啊,沿着视口中心的方向发射一条射线碰到地面的坐标不就是我要的标识坐标了吗?

        Vector3 CenterPos;
        Ray ray = Camera.main.ScreenPointToRay(new Vector2(Screen.width / 2, Screen.height / 2));
        RaycastHit hit;
        Vector2 v = new Vector2(Screen.width / 2, Screen.height / 2); //屏幕中心点
        if (Physics.Raycast(ray, out hit))
        {
            Debug.DrawLine(Camera.main.transform.position, hit.point, Color.green);
            Vector3 pso = new Vector3(Camera.main.transform.position.x, 0, Camera.main.transform.position.z);
            //Debug.DrawLine(Camera.main.transform.position, pso, Color.red);

            Distence = Vector3.Distance(Camera.main.transform.position, hit.point);
            CenterPos = hit.point;
        }
        ImgPos = WorldPositionToMap(CenterPos);
        NavImg.position = ImgPos;

那么问题来了,当我点击小地图时候怎么匹配摄像机的位置呢,毕竟这样根据之前的脚本返回的坐标也是视口中心点坐标,难道还要逆推回去获得摄像机的坐标?

这样太麻烦了,数学学得不好脑袋都被搞晕了。

我这里用了一个取巧的方法,获取摄像机视口中心点坐标和小地图上返回的坐标点xy的偏差值,将这个偏差值加在摄像机上即可,毕竟这也算是个平行四边形(谁还敢说我数学不好!)

 /// <summary>
    /// 点击小地图主摄像机移动
    /// </summary>
    public void MapClick1()
    {
        if (IsSizeDrag) return;
        Vector2 point = Input.mousePosition;
        Vector3 PointPos = MapToWorld(point);
        //Vector3 Pos = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0));
        //根据视口中心点坐标偏差改变摄像机位置

        //Vector3[] corners = GetCorners(Distence);
        //Vector3 pos = (corners[3] + corners[0]) / 2;
        Vector2 v = new Vector2(Screen.width / 2, Screen.height / 2); //屏幕中心点
        float x = Camera.main.transform.position.x + PointPos.x - v.x;
        float z = Camera.main.transform.position.z + PointPos.z - v.y;
        Camera.main.transform.position = new Vector3(x, Camera.main.transform.position.y, z);

    }

写到这里你以为功能就已经完成了吗?

在你使用摄像机开始旋转的时候还会发现一个问题,就是当你的摄像机视口的中心点没有物体给你碰撞检测的时候,位置再次不匹配了,这个我暂时还没找到合适的方式修改,只能在地面下面添加一个空物体添加一个非常大的Boxcolider以及将摄像机的可移动的范围坐上限制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值