关卡地图
1.新建场景
2.新建Tile Palette,命名为OverWorld
保存在Tiles下新建的OverWorld文件夹下
3.导入资源
将2D Platformer Assets/Graphics/Overworld文件夹下Overworld_tiles_Padded拖到新建的OverWorld Palette下,并保存在新建的Assets/Tiles/OverWorld文件夹下
4.制作地图
在Grid下新建Tilemap,将两个Tilemap分别命名为Ground和Overlay,分别用来制作背景地图和关卡选择地图
将两个Tilemap的Sorting Layer设置为World,并将Overlay的Order设置为1,使其在Ground上层
分别制作地图Ground
Overlay
5.关卡点
新建空对象,命名为MapPointHolder,用于保存各个关卡点和节点
在MapPointHolder下新建空节点MapPoint,并制作预制体,保存到Prefabs/LevelSelect文件夹(新建)下
复制多个MapPoint,移动到节点和转角
6.新建脚本MapPoints
新建脚本MapPoint,添加组件到第一个
设置overrides,使全部预制体生效
添加参数
//上下左右的MapPoint点
public MapPoint up; //上
public MapPoint right; //右
public MapPoint down; //下
public MapPoint left; //左
public bool isLevel; //是否是关卡
设置所有的MapPoint点的上下左右值,是否是关卡
7.添加小狐狸图标
拖入小狐狸图标岛场景,重命名为Player,用来显示当前选择的地方
移动小图标到关卡1的地方
添加背景音乐到场景,重命名为LevelSelectMusic
设置音乐循环,以及输出混响
8.新建脚本LevelSelectPlayer
在Scripts文件夹下,新建脚本文件,用来控制关卡界面的player,并添加组件到Player上绑定
添加参数
public MapPoint currentPoint; //当前所在的point点
public float moveSpeed; //移动速度
新建函数,设置下一个移动点
//设置下一个移动点
public void SetNextPoint(MapPoint nextPoint)
{
currentPoint = nextPoint;
}
在Update()中,编辑移动时逻辑
void Update()
{
//更新Player的位置 移动效果
transform.position = Vector3.MoveTowards(transform.position, currentPoint.transform.position, moveSpeed* Time.deltaTime);
if(Vector3.Distance(transform.position, currentPoint.transform.position) < 0.1f) //防止胡乱移动
{
//上下左右移动
if (Input.GetAxisRaw("Horizontal") > 0.5f)
{
if (currentPoint.right != null)
{
SetNextPoint(currentPoint.right);
}
}
if (Input.GetAxisRaw("Horizontal") < -0.5f)
{
if (currentPoint.left != null)
{
SetNextPoint(currentPoint.left);
}
}
if (Input.GetAxisRaw("Vertical") > 0.5f)
{
if (currentPoint.up != null)
{
SetNextPoint(currentPoint.up);
}
}
if (Input.GetAxisRaw("Vertical") < -0.5f)
{
if (currentPoint.down != null)
{
SetNextPoint(currentPoint.down);
}
}
}
}