LoL、DOTA、王者荣耀类游戏小地图注册及相机的跟随

有几天没有更新博客了,在做一个塔防的小游戏,然而想着想着功能就多了,感觉可以做成一个小型的单机游戏了,我会在接下来的几篇博客把这个项目的一些功能及获得的感悟呈现给大家,今天继续上次的视角变动,在鼠标指向屏幕边缘的时候让摄像机获得移动从而达到视角的移动功能,接下来需要和小地图的结合,点击小地图的某个位置,让摄像机移动到相对位置观看该位置的效果。
在此之前要先了解一下Game视口,视口就是展现给玩家的一个屏幕,屏幕就是摄像机照射所呈现的东西,在这个项目中小地图使用的是正交摄像机,垂直照射整个地图,形成实时呈现的状态,主视口是透视摄像机,呈现效果展示,如下图:
Game视口展示

这里把Game视口放大全名显示,图中为小地图加了一个边框,可以忽略,实现以上所述内容,代码如下:

public Camera cameraTop;//将小地图摄像机(正交摄像机)传入
void Update () {
        //生成一个鼠标的位置为  在小地图屏幕转为视口坐标
        Vector3 v1 = cameraTop.ScreenToViewportPoint(Input.mousePosition);
        //判定是否在小地图的视口坐标内
        if ((v1.x >= 0.1f && v1.x <= 0.95f) && (v1.y >= 0.1f && v1.y <= 0.87f)) 
        {
            if (Input.GetMouseButtonDown(1))//鼠标右键键点击
            {
                //将在小地图上点击的一个视口坐标点转为世界坐标点
                Vector3 v2 = cameraTop.ViewportToWorldPoint(v1);
                //实现点击小地图,小龙也能移动到世界坐标位置
                agent.SetDestination(new Vector3(v2.x, dragon.transform.position.y, v2.z));//导航开启
            }
            if (Input.GetMouseButtonDown(0))//鼠标点击左键
            {
                //将在小地图上点击的一个视口坐标点转为世界坐标点
                Vector3 v2 = camera1.ViewportToWorldPoint(v1);
                //让主摄像机的位置等于这个坐标点,但是要注意的是有一定的偏差,所以在这里生成一个新的坐标Y轴为摄像机的Y轴(保持视野不变),X轴,Z轴根据需要自行调整
                mainCamera.transform.position = new Vector3(v2.x, mainCamera.transform.position.y, v2.z-10);
            }
            else if (Input.GetMouseButton(0))//鼠标拖动的实现,原理同上
            {
                Vector3 v2 = camera1.ViewportToWorldPoint(v1);
                mainCamera.transform.position = new Vector3(v2.x, mainCamera.transform.position.y, v2.z-10);
            }
        }
        else//如果没有在视口坐标内执行角色移动的脚本
        {
        //见上一篇博客,<人物的移动>代码片段
        }

        //完善一下其他功能
        //通过滚轮调整视野远近
        if (Input.GetAxis("Mouse ScrollWheel") < 0)//滚轮后滚
        {
            if (Camera.main.fieldOfView <= 80)//限定最大视野
                Camera.main.fieldOfView += 2;
            if (Camera.main.orthographicSize <= 20)
                Camera.main.orthographicSize += 0.5F;
        }
        if (Input.GetAxis("Mouse ScrollWheel") > 0)//滚轮前滚
        {
            if (Camera.main.fieldOfView > 2)//限定最小视野
                Camera.main.fieldOfView -= 2;
            if (Camera.main.orthographicSize >= 1)
                Camera.main.orthographicSize -= 0.5F;
        }

        if (Input.GetKey(KeyCode.Space))//如果按下空格,摄像机回到人物身上
        {
            mainCamera.transform.position = new Vector3(dragon.transform.position.x+1, dragon.transform.position.y + 14.92673f, dragon.transform.position.z-8);//计算偏移量让摄像机等于这个视野刚好的位置
        }

}

下面为大家稍微演示一下鼠标点击小地图及拖动:
小地图拖动
缩放及空格回看:
缩放及回看

核心代码主要是两行,理解了还是很简单的,希望对大家有所帮助吧!
我是博主小磊,欢迎关注、分享、评论哟~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值