【Unity实战篇 】 2(1)
2.5D游戏的发展也受益于技术的进步,使得游戏制作人员能够创建更加精美、逼真的图像效果,为玩家带来更好的游戏体验。,将MainCamera放到该物体下作为子对象,再将MainCamera的Rotation设置为(-45,0,0),Position的数值可以根据搭建的地图进行微调,新建一个脚本。可以看到,此时的游戏画面就是单纯的2D游戏画面,看起来也没有2.5D的既视感,所以还需要对相机进行设置。,
一、2.5D 游戏概念
2.5D游戏
是一种介于二维和三维之间的游戏形式。它通常在二维平面上展示游戏内容,但利用三维技术来实现更加逼真的图像效果。
在2.5D游戏中,角色和环境通常是以平面的形式呈现,但可以在垂直方向上移动。这意味着玩家可以在一个相对较薄的虚拟空间内进行自由探索和交互,同时享受到更加立体感的视觉效果。
与传统的二维游戏相比,2.5D游戏可以通过使用透视、光影效果和深度感等技术来增强场景的真实感。这为玩家提供了更好的沉浸式体验,同时保留了传统2D游戏的简单和直观性。
许多平台游戏、角色扮演游戏和冒险游戏都采用了2.5D的形式,从而使玩家能够在一个相对较小的空间内尽情探索。2.5D游戏的发展也受益于技术的进步,使得游戏制作人员能够创建更加精美、逼真的图像效果,为玩家带来更好的游戏体验。
这种类型的游戏在平台游戏、动作游戏和冒险游戏等类型中比较常见, 例如八方旅人/歧路旅人
这种游戏就是2.5D这类游戏的标杆之作了。
八方旅人画面演示
下面来看一下在Unity中如何制作一款2.5D的游戏吧!
二、绘制地图
首先我们需要搭建一个地图用于游戏测试,这里使用Unity的 Tile Map Editor
来搭建地图。
Tile Map Editor
的使用方法也很简单,可以看这篇文章学习下怎样使用Tile Map
快速搭建一个地图。
【Unity 实用工具篇】✨| 学会使用 可编程瓦片Tile Map,快速搭建2D地图
层级需要特别注意,这里把 TileMap Renderer
的 Order in Layer
设置为0,这一层用于最下层背景显示,防止遮盖到其他对象。
搭建好的地图如下所示:
此时还需要在地图中增加一些场景物品,如大树、石头等等。
这里在面板中右键 2D Object -> Sprite
创建一个Sprite,然后在Sprite Renderer中设置想要的场景物体精灵图即可,这里要把 Order in Layer
设置为1,否则会看不到新创建的对象。
同时 要给这些添加的场景物品增加碰撞器,让玩家不能穿过该物体。
下面是添加完场景物品后的地图,看起来内容丰富了不少,效果好了很多。
在场景中新建一个游戏对象InteractionObject
,将这些新建的场景物体全部放到InteractionObject对象下当做子物体,方便后期统一处理。
三、添加玩家动画和移动等操作
接下来再创建一个Sprite作为玩家,将 Order in Layer 层级
设置为1,并给玩家添加 Rigidbody2D刚体
和 Collider碰撞体
并适当的调整大小。
接下来在Project下右键 Create -> Animatior Controller
创建一个 Animatior Controller
用来管理玩家的动画,主要有 上、下、左、右移动和默认的Idle动画。
点开Animatior面板后创建两个 BlendTree混合树
。
接下来在Animator面板创建两个 Float类型的参数 InputX 和 InputY 用来在混合树中接收使用。
双击点开Idle混合树,将Blend Type
设置为 2D Simple Doirectional
,这样我们就有两个参数用来表示二维平面上移动。
然后点击混合树面板的 +
添加四个Motion
,分别将Idle的上、下、左、右动画添加上去,并将对应的PosX和PosY数值添加上去。
这里的PosX和PosY代表分别代表玩家按下X轴和Y轴的方向。
例如 PosX为1时代表玩家按下右方向键 此时X轴上的值为1,所以播放Idle_Right动画;
PosY为1时代表玩家按下上方向键 此时Y轴上的值为1,所以播放Idle_Back动画。
动画需要自己找资源配套使用哦!
同样的操作给Walk混合树也配置一下。
然后在Animator面板继续添加一个Bool类型的参数 IsMove
,用来控制玩家的Idle和Walk状态的切换。
这样我们角色的动画就算配置好了,接下来写代码完成角色的移动方法和动画的播放就好了。
如果动画这块还不是很明白的话,也可以再去学习一下Unity中的动画相关知识:
Unity零基础到入门 ☀️| 近万字教程 对 Unity 中的 动画系统基础 全面解析+实战演练。
创建一个脚本PlayerMovement ,将其挂载到玩家身上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float speed;
new private Rigidbody2D rigidbody;
private Animator animator;
private float inputX, inputY;
private float stopX, stopY;
void Start()
{
rigidbody = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
}
void Update()
{
inputX = Input.GetAxisRaw("Horizontal");
inputY = Input.GetAxisRaw("Vertical");
//让玩家根据自己本地坐标进行向量计算
Vector2 input = (transform.right \* inputX + transform.up \* inputY).normalized;
rigidbody.velocity = input \* speed;
if (input != Vector2.zero)
{
animator.SetBool("IsMove", true);
stopX = inputX;
stopY = inputY;
}
else
{
animator.SetBool("IsMove", false);
}
animator.SetFloat("InputX", stopX);
animator.SetFloat("InputY", stopY);
}
}
可以选择将Main Camera放到玩家对象当做子物体,这样玩家移动时相机也可以跟着玩家移动,此时运行程序进行测试。
可以看到,此时的游戏画面就是单纯的2D游戏画面,看起来也没有2.5D的既视感,所以还需要对相机进行设置。
四、视角配置
4.1 调整摄像机与场景对象的角度
相机的设置其实很简单,只需要让其视选择45°,以俯视角的视角来观看场景。
先来新建一个游戏对象CameraPosition
,将MainCamera放到该物体下作为子对象,再将MainCamera的Rotation设置为(-45,0,0),Position的数值可以根据搭建的地图进行微调,新建一个脚本RotatingCamera
挂载到该对象上。
该脚本的作用是让相机一直跟随玩家移动,脚本内容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotatingCamera : MonoBehaviour
{
private Transform player;
void Start()
{
player = GameObject.FindGameObjectWithTag("Player").transform;
}
void Update()
{
transform.position = player.position;
}
}
再新建一个脚本FacingCamera
,将其挂载到前面搭建的场景对象的父物体InteractionObject
上。
该脚本的作用是让该对象下的所有子物体的角度始终与相机的旋转角度对齐,代码如下:
using UnityEngine;
public class FacingCamera : MonoBehaviour
{
Transform[] childs;
void Start()
{
childs = new Transform[transform.childCount];
for (int i = 0; i < transform.childCount; i++)
{
childs[i] = transform.GetChild(i);
}
}
void Update()
{
for (int i = 0; i < childs.Length; i++)
{
childs[i].rotation = Camera.main.transform.rotation;
}
}
}
此时运行游戏查看效果:
4.2 增加镜头旋转功能
在有些2.5D游戏中还支持镜头的旋转,这里也加上这个功能看一下效果。
首先要修改RotatingCamera的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotatingCamera : MonoBehaviour
{
**(1)Python所有方向的学习路线(新版)**
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/1f807758e039481fa866130abf71d796.png#pic_center)
**(2)Python学习视频**
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
![在这里插入图片描述](https://img-blog.csdnimg.cn/d66e3ad5592f4cdcb197de0dc0438ec5.png#pic_center)
**(3)100多个练手项目**
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f5aeb4050ab547cf90b1a028d1aacb1d.png#pic_center)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)