Unity入门3.2-UI组件运用:小地图

上期博客:Unity入门3.1-UI组件运用:后视镜

3.2:小地图:在场景设置一个平面作为地面,在地面上随机摆放立方体,球体,胶囊等物品,Raw Image、Render Texture和另一个摄像机在屏幕的左上角实现小地图。

其实“小地图”的实现和“后视镜”异曲同工,只需要将摄像机移到上方,对下方平面拍摄即可。效果如图所示。
5-2-1.png
但在写博客的时候,笔者感觉后视镜已经很简易了,小地图再这么简单说不过去,于是修修改改做成了不是那么简易的“小地图”。

为了更好的区分物体,在原本的小地图的基础上,给平面添加了一个表示颜色的材质Material。添加了一个移动主体Cube。接下来,需要实现两个功能:主体Cube(可视作Player)的移动和摄像机跟随Cube移动。

主体Cube的移动:创建一个挂在Cube上的C#脚本,实现按ADWS移动。

 
1234567
void Update() { //实现WS前后移动 transform.position += transform.forward * Input.GetAxis("Vertical"); //实现AD左右移动 transform.position += transform.right * Input.GetAxis("Horizontal"); };

在这段代码中,使用到了输入对象Input。Unity 3D为开发人员提供了输入对象Input。开发人员可以通过Input对象方便地获取用户各种输入,如鼠标、键盘和游戏杆的输入等。

使用GetAxis可获取方向键”adws”:
GetAxis(“Horizontal”):按左右方向键或”a””d”键时,依按下的时间返回-1到1之间的浮点数。
GetAxis(“Vertical”):按上下方向键或”w””s”键时,依按下的时间返回-1到1之间的浮点数。

因此,开发者可以通过改变物体位置来实现物体移动。但在实际效果中,开发者会发现物体移动的速度比设定的速度快很多。这是因为Updata()函数是按帧数调用的。一般情况下,Unity帧数为60帧,每秒的移动速度将是开发者所设定的数十倍。并且因为帧数变动等情况,每秒移动的距离还可能是不确定的!

此时,可以引入增量时间(deltatime)来进行移动限制。增量时间是随帧数实时变动的。每秒N帧的情况下,增量时间为1/N秒。移动距离乘上增量时间,即可保证每秒移动的距离为设定的距离。修改代码如下:

 
1234567
void Update() { //实现WS前后移动 transform.position += transform.forward * Input.GetAxis("Vertical") * Time.deltaTime; //实现AD左右移动 transform.position += transform.right * Input.GetAxis("Horizontal") * Time.deltaTime; };

实现摄像机跟随物体较为简单,将摄像机设置为Cube的分支Child即可,当物体移动时,摄像机跟随移动,即可实现视角跟随/小地图跟随的功能。
5-2-2.png
最终的运行效果展示:
5-2-3.png
5-2-4.png
该项目还有可扩展的地方,例如Player的转向移动、刚体的碰撞等。笔者将在之后的项目中再行讨论。

参考博客:Unity增量时间Time.deltaTime详解

写于2022/09/11

# 技术,Unity开发入门
Unity入门3.1-UI组件运用:后视镜
评论
FengLingJun天狼山东
文章3
分类2
标签2