DoTa、LOL类游戏转移视角及角色移动
2017-08-25 21:35
501 查看
目前DoTa、LOL类似游戏火遍大街小巷,连手机上也出现了一批王者荣耀、自由之战这样类似的游戏,玩家移动靠鼠标点击,在有限的地图内来回切换,具有战略意义及操作结为一体,从而深受大众好评,今天就带大家模仿一下这类游戏的地图鸟瞰的视角转移以及游戏角色的移动。
首先我们需要了解一下摄像机:
摄像机分为透视摄像机和正交摄像机,顾名思义,透视摄像机就如我们人眼看到的实物一样,符合近大远小的规律,而正交摄像机则是还原实物本来面目,在镜头内将事物原本的大小完完全全的呈现出来,在游戏中通常我们以玩家视角使用透视摄像机,小地图使用正交摄像机,这篇博客主要讲的是如何让透视摄像机进行移动达到视角转移的效果。
如图所示,将两台摄像机分屏显示,模拟LOL场景,将鼠标往右边滑动,透视摄像机将会随之移动,将右边的画面展现出来,需要以下代码实现:
接下来是角色的移动,使用NavMesh(导航网格)在烘焙过的网格中让角色对鼠标点击的地方进行自动寻路:
好啦让小龙移动起来吧!
我是博主小磊,欢迎关注、分享、丢香蕉给我哟~~
首先我们需要了解一下摄像机:
摄像机分为透视摄像机和正交摄像机,顾名思义,透视摄像机就如我们人眼看到的实物一样,符合近大远小的规律,而正交摄像机则是还原实物本来面目,在镜头内将事物原本的大小完完全全的呈现出来,在游戏中通常我们以玩家视角使用透视摄像机,小地图使用正交摄像机,这篇博客主要讲的是如何让透视摄像机进行移动达到视角转移的效果。
如图所示,将两台摄像机分屏显示,模拟LOL场景,将鼠标往右边滑动,透视摄像机将会随之移动,将右边的画面展现出来,需要以下代码实现:
public float speed;//移动速度 public float ambit;//判定范围界限 void Update () { //生成一个位置 为 将(获取的鼠标的位置的)屏幕坐标系向摄像机视口的单位化坐标系转换 Vector3 v1 = Camera.main.ScreenToViewportPoint(Input.mousePosition); //判定当鼠标移动到规定范围外就让摄像机进行移动,以世界坐标轴为单位。 if (v1.x < ambit)// X的坐标最小值,即屏幕左侧 { transform.Translate(Vector3.left * speed * Time.deltaTime, Space.World); } if (v1.x > 1 - ambit)// X的坐标最大值,即屏幕左侧 { transform.Translate(Vector3.right * speed * Time.deltaTime, Space.World); } if (v1.y < ambit)// Y的坐标最小值,即屏幕下方 { transform.Translate(Vector3.back * speed * Time.deltaTime, Space.World); } if (v1.y > 1 - ambit)// Y的坐标最大值,即屏幕上方 { transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.World); } }
接下来是角色的移动,使用NavMesh(导航网格)在烘焙过的网格中让角色对鼠标点击的地方进行自动寻路:
private NavMeshAgent agent;//创建一个导航组件 public GameObject player;//创建一个游戏对象 public GameObject flower;//方便查看制作一个点击效果 void Start () { //在要移动的对象Player上获取组件 agent = player.GetComponent<NavMeshAgent>(); } void Update () { //创建一个从摄像机发出的射线,位置为鼠标的位置 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit;//鼠标点击 if (Physics.Raycast(ray, out hit)) { //获取鼠标右键按键 if (Input.GetMouseButtonDown(1)) { //克隆点击效果,0.6秒后消失 GameObject flowers = Instantiate(flower, new Vector3(hit.point.x, agent.transform.position.y, hit.point.z), flower.transform.rotation)as GameObject; Destroy(flowers, 0.6f); //寻路系统开启,目标位置为鼠标点击的X、Y、Z轴 agent.SetDestination(new Vector3(hit.point.x, agent.transform.position.y, hit.point.z)); } }
好啦让小龙移动起来吧!
我是博主小磊,欢迎关注、分享、丢香蕉给我哟~~
相关文章推荐
- 2D的RPG游戏人物角色移动代码(以egret游戏引擎、TypeScript语言为例)
- unity3d-代码控制游戏角色控制器移动
- 按住鼠标右键,移动场景内镜头(适用于塔防等游戏视角)
- Android应用程序入门 推箱子游戏开发(二) 键盘事件监听 角色在屏幕上移动
- Unity3D游戏制作(三)——移动平台上的角色阴影制作
- Unity3D游戏制作之3D横版场景的角色移动控制
- Unity3D游戏制作(三)——移动平台上的角色阴影制作
- ActionScript3使用角度值控制游戏角色的动作和移动
- 【Unity】按住鼠标右键,移动场景内镜头(适用于塔防等游戏视角)
- 游戏视角移动AS3
- android游戏开发框架libgdx的使用(十三)—TiledMap中的角色和角色移动
- unity3d阶段性学习脚本代码(2个是摄像机跟随(2D游戏中的),1个是角色跳跃移动脚本)
- Unity3D游戏制作 移动平台上的角色阴影制作
- UDK学习笔记之(一)——添加快捷键切换视角、加减角色移动速度,初始化改变视角
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(九) 2D游戏角色在地图上的移动
- android游戏开发框架libgdx的使用(十三)—TiledMap中的角色和角色移动
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(九) 2D游戏角色在地图上的移动
- android游戏开发框架libgdx的使用(十三)—TiledMap中的角色和角色移动
- 学习使用easelJS类库控制HTML5游戏角色的移动和跳跃
- Unity控制角色移动错误问题集合、第一人称视角