用unity制作一个宝可梦——1.入门和瓦片地图
1.下载unity社区以及对应的unity版本(我用的是2020.3.46f1c1,最好用2020.3.48f1c1,是长期支持版)
2.创建2D核心模板,取消勾选版本控制(不要用unity默认的版本控制,会打不开项目)
3.下载图片资源到本地,解压资源(最好留个备份,不要和宝可梦项目放在一起)

4.在unity编辑器中创建一个Art的文件夹用来存放游戏的艺术资源,将解压出来的资源文件放入Art中并设置好像素单元为16*16
5.创建玩家物体,以及画背景(注意创建文件夹的路径,别搞乱,否则后续容易找不到)
6.创建两个排序图层Sorting Layer,分别是Player和BackGround,注意调整顺序!分别给玩家和背景的物体选择排序图层
7.创建PlayerController脚本,挂载到玩家上
8.编写脚本,发现移动有问题,改了下代码
//控制玩家的脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float moveSpeed; //玩家的移动速度
private static bool isMoving; //是否处在移动
private void Update()
{
if (!isMoving)
{
var input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
if (input != Vector2.zero) //如果输入的值不为0
{
var targetPos = transform.position; //targetPos:目标位置 transform.position:当前位置
targetPos.x += input.x; //x方向加上垂直方向输入进来的值
targetPos.y += input.y; //y方向加上水平方向输入进来的值
StartCoroutine(Move(targetPos, input));
}
}
}
IEnumerator Move(Vector3 targetPos, Vector2 input)
{
isMoving = true;
// 循环判断当前位置与目标位置之间的距离是否大于一个很小的数值
while ((targetPos - transform.position).sqrMagnitude > Mathf.Epsilon)
{
// 计算每帧应该移动的距离,并让物体朝目标位置移动一步
transform.position = Vector3.MoveTowards(transform.position, targetPos, moveSpeed * Time.deltaTime);
// 让协程函数在每个FixedUpdate()中等待一次,确保物理计算与 Update() 同步进行
yield return new WaitForFixedUpdate();
}
// 直接将物体移动到精确定位到目标位置上,避免偏差堆积
transform.position = targetPos;
isMoving = false;
}
}

