Skip to main content
 首页 » 资源教程 » Unity3D教程

Unity 牵引式地图移动模式

2017年01月05日 19:40:028360蛮牛网

背景

这是一个经常被人忽略的一个问题,这里请允许我剽窃一张深蓝色右手的图片,来说明下问题。其实大家都玩过Arpg游戏,我是看了深蓝的文章才意识的居然有这么一个问题。

Unity 牵引式地图移动模式 Unity3D教程 第1张

 

1、游戏中的地图是比游戏窗口大的,比如窗口分别率是800*600,而游戏的地图是1400*1000,这样无论如何是无法在窗口中看到完整地图的。

2、当角色移动到窗口的边缘的时候,新的地图部分进入到窗口中 (有点探路的感觉),但是当到达地图的边缘时, 窗口中不应该显示超出地图的部分。

Unity 牵引式地图移动模式 Unity3D教程 第2张

 

3d游戏也是如此,想想玩魔兽的时候到达地图的边缘一般会怎么样,要么是大海,要么是悬崖,要么是空气墙(好像我没有遇到过),反正是不会掉到场景下面(由于有重力的原因)。

分析

仔细想想应该有两种方式来实现该功能:

1、正常人类的想法,我们是上帝,一直盯着角色(我们就是摄像机),也就是摄像机尾随者角色,而角色在地图上移动。角色动、相机动,地图不动。

2、非人类的想法,以前的2D引擎,相机是不能移动的,也就是窗口是固定不能移动的,只能通过地图移动的方式来时先。也就是角色不动,相机不动,地图移动。

3、这里牵引的意思是通过鼠标的位置来驱动移动,所以这篇叫牵引式移动

实际两种方式的原理都是一样的,只是参照物不同而已,当然实际情况比这个还复杂,地图上除了角色意外还有别的精灵和信息,这篇只是一个引子,具体可以参考深蓝色右手的这篇教程。

实现

本篇实现的是方式2,牵引式地图移动模式,也就是通过鼠标的位置(鼠标位于屏幕坐标的位置,一共有8个位置区域)来牵引地图做反向移动,而角色并不移动。实现效果如下所示:

这里还是需要计算地图移动的边界值,不能移动过头了。实际是一种几何运算,技术难度倒是没有,自己算起来比较累。错误的截图是这样。

代码我完全贴出来了,基本是完全将wpf的代码转成了Unity,注意几个问题:

1、unity的坐标系与wpf的不同,坐标原点在左下角,元素的对齐方式是中心点;

2、untiy的世界坐标是Unit,屏幕坐标是像素,计算需要转换;

3、一共两个核心函数getMouseArea()获得鼠标的屏幕坐标位置索引,Timer_Tick()在Update中根据鼠标的屏幕坐标位置索引进行地图的反向移动并包括了移动边缘判断;

4、精灵实际并没有移动。

Unity 牵引式地图移动模式 Unity3D教程 第3张


 

Unity 牵引式地图移动模式 Unity3D教程 第4张


 

Unity 牵引式地图移动模式 Unity3D教程 第5张


 

Unity 牵引式地图移动模式 Unity3D教程 第6张


 

Unity 牵引式地图移动模式 Unity3D教程 第7张

 

总结

光看不做,效果不大,要想学习,还需实践。

Unity 牵引式地图移动模式 Unity3D教程 第8张

评论列表暂无评论
发表评论