欢迎光临散文网 会员登陆 & 注册

用unity制作一个宝可梦——1.入门和瓦片地图

2023-06-07 11:50 作者:立志看完尚硅谷  | 我要投稿

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;

}

}







用unity制作一个宝可梦——1.入门和瓦片地图的评论 (共 条)

分享到微博请遵守国家法律