unity 从头开始制作类dota2小地图

2023-10-22 06:50

本文主要是介绍unity 从头开始制作类dota2小地图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  想要做一个类似dota2小地图的功能,但是用了几个插件,感觉并不是我想要的效果,就自己做了个小地图,现在把这部分功能提出来,简单再做记录下。

首先我们要做一些准备工作:让人物可以在一块地图上自由行走。创建个Plane当作地图表面,再摆放写Cube当作障碍物,如图:

  

  淡蓝色的为地图平面,褐色的方块为障碍物,接着分别给地图和障碍物方块设置Wakeable和Not Wakeable进行导航网格的烘焙。接着再引入个第三人称视角的人物控制器,按照导航网格进行行走,效果如下图:

  

  准备工作做好了,现在就要真正开始小地图的制作了。

  一、创建个Panel,大小和Canvas一样大,作为界面,canvas的UI Scale Mode属性设置为Scale With Screen Size,这样界面在屏幕缩放时可以相应的缩放,分辨率就设置为1280*960吧。Panel改名为DlgMiniMap,创建个Image,对当前场景进行截图,并设置给创建的Image,锚点设置为右上方。好的,这时候已经有小地图了。如图:

  

  有了地图之后,我们就可以做人物与小地图的对应显示了。思路如下:新建一个image用来显示人物,我这边用的是一个箭头图标,测量地图的左下角、右上角从而得知地图的大小与中心点,给DlgMiniMap界面增加一个同名脚本,在Update中实时计算人物的相对位置与角度,Update代码:

 void Update(){Vector3 vecPosOffset = player.transform.position - vecMapCenter; //计算人物位置与地图中心的偏移float fOffsetX = vecPosOffset.x / vecMapSize.x * fWidth;float fOffsetY = vecPosOffset.z / vecMapSize.y * fHeight;rtImgPlayer.anchoredPosition = new Vector2(fOffsetX, fOffsetY);	//因为中心位置为(0,0),所以直接设置成偏移值rtImgPlayer.eulerAngles = new Vector3(0, 0, -player.transform.rotation.eulerAngles.y); //人物面向的角度是绕着Y轴的,直接把Y的欧拉角设置为箭头的Z轴}
  效果如下:

  

  做到这一步,我们的小地图就只剩一个步骤了:点击小地图的位置,人物自动导航到该点(如果不可行走,那么走到最近点)。思路跟上一个步骤差不多,不过有个差别是前面的计算我们没有去理会场景视图的缩放造成的影响,直接把Image当做原始大小来处理就行了,UGUI会自动帮我们缩放,但是现在因为我们加入了鼠标点击,而鼠标点击是基于当前屏幕分辨率的,所以在处理鼠标点击位置的时候我们得把缩放的因素考虑进去。

  给地图Image添加EventTrigger组件并增加OnPointerClick事件,绑定DlgMiniMap新增的SelTargetPos函数,SelTargetPos代码如下:

public void SelTargetPos(){float fScreenWRate = (Screen.width - vecPos.x) * 2 / fWidth; //根据地图与右上角的距离,计算出地图显示尺寸与原尺寸的横纵比例float fScreenHRate = (Screen.height - vecPos.y) * 2 / fHeight;float fXRate = (Input.mousePosition.x - vecPos.x) / (fWidth * fScreenWRate); //根据鼠标与中心的距离计算出横纵偏移比例float fZRate = (Input.mousePosition.y - vecPos.y) / (fHeight * fScreenHRate);Vector3 vecOffest = new Vector3(fXRate * vecMapSize.x, 0, fZRate * vecMapSize.y); //计算出横纵的具体Offset值Vector3 vecTargetPos = vecMapCenter + vecOffest; //得到目标点Debug.Log(Input.mousePosition);var objMove = player.GetComponent<MoveController>();if (null == objMove){return;}objMove.MoveToTargetPos(vecTargetPos); //调用人物MoveController接口,移动到目标点}
  MoveController.MoveToTargetPos接口代码为:

public void MoveToTargetPos(Vector3 vecPos){ani.SetBool("Run", true); //播放跑步动画nav.isStopped = false; //开始寻路nav.SetDestination(vecPos); //设置目标点}
  写到这,我们的小地图就差不多完成了,点击小地图寻路效果如下(忽略她手上多出来的那把刀。。。):



  大功告成。当然如果真正要应用的话,还有很多需要补充完善的地方,例如要显示多个人物标识,地图肯定也需要美术提供,不可能就是一张截图等等。这边就是提供这个一个思路,可以使用这种方式来制作小地图,而且也很简单,代码量不多。

这篇关于unity 从头开始制作类dota2小地图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/259799

相关文章

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

Python利用GeoPandas打造一个交互式中国地图选择器

《Python利用GeoPandas打造一个交互式中国地图选择器》在数据分析和可视化领域,地图是展示地理信息的强大工具,被将使用Python、wxPython和GeoPandas构建的交互式中国地图行... 目录技术栈概览代码结构分析1. __init__ 方法:初始化与状态管理2. init_ui 方法:

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

使用Folium在Python中进行地图可视化的操作指南

《使用Folium在Python中进行地图可视化的操作指南》在数据分析和可视化领域,地图可视化是一项非常重要的技能,它能够帮助我们更直观地理解和展示地理空间数据,Folium是一个基于Python的地... 目录引言一、Folium简介与安装1. Folium简介2. 安装Folium二、基础使用1. 创建