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

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

全英文地图/天地图和谷歌瓦片地图杂交/设备分布和轨迹回放/无需翻墙离线使用

一、前言说明 随着风云局势的剧烈变化,对我们搞软件开发的人员来说,影响也是越发明显,比如之前对美对欧的软件居多,现在慢慢的变成了对大鹅和中东以及非洲的居多,这两年明显问有没有俄语或者阿拉伯语的输入法的增多,这要是放在2019年以前,一年也遇不到一个人问这种需求场景的。 地图应用这块也是,之前的应用主要在国内,现在慢慢的多了一些外国的应用场景,这就遇到一个大问题,我们平时主要开发用的都是国内的地

OpenStack离线Train版安装系列—0制作yum源

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack镜像制作系列5—Linux镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作

OpenStack镜像制作系列4—Windows Server2019镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录  CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作系

OpenStack镜像制作系列2—Windows7镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作系列

OpenStack镜像制作系列1—环境准备

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作

CSDN:OpenStack镜像制作教程指导(全)

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录,涉及基本环境准备、常见类型操作系统的镜像制作。 让你可以从零开始安装一个操作系统,并支持个性化制作OpenStack镜像。 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows

docker学习系列(四)制作基础的base项目镜像--jdk+tomcat

前面已经完成了docker的安装以及使用,现在我们要将自己的javaweb项目与docker结合 1.1准备jdk+tomcat软件 ​​我下载了apache-tomcat-7.0.68.tar.gz和jdk-7u79-linux-x64.tar.gz,存储于Linux机器的本地目录/usr/ect/wt/下(利用xshell上传)。利用linux命令 tar -zxvf apache-tom