当前位置:   article > 正文

Unity2d学习笔记(一)添加角色地图并且实现人物移动_unity2d 地图跟随玩家移动

unity2d 地图跟随玩家移动

写这个系列的目的

最近在学习unity2d游戏制作,这个系列的文章就是想将我学到的知识记录下来,方便自己以后复习回顾。

Unity2d基础知识

众所周知,Unity是一个游戏引擎,就我的理解来说,游戏引擎就是封装了计算机底层的接口(如图形化接口),然后封装了一些游戏的常用功能(如获取用户的输入),然后提供了一个方面编辑游戏的图形化界面以及工具的软件集合。

对于开发人员来说,使用游戏引擎就可以避免重复造轮子,可以专注于游戏内容的开发。这就和我们使用python的matplotlib库一样,有了这个库,我们就可以专注于数据本身,而不是去考虑从头开始在窗口中画坐标轴。

下面来介绍Unity开发的基础知识。

Unity的所有对象都被封装成Object类,我的理解是这是所有类的基类(如有不对,欢迎指出)。所有的类都可以在界面中的“层级”窗口查看。

如上图所示,图中黄色框中的就是“层级”窗口,我们所有的对象都可以在这个窗口中检索;图中绿色框是“场景”“游戏”“动画器”窗口。这个界面主要是用来编辑游戏界面以及动画的;图中紫色框是“项目”“控制台”,这是用来管理文件以及查看代码输出的;图中棕色框是“检查器”“平铺调色板”“检查器”用来编辑对象属性,“平铺调色板”用来编辑地图。

以上界面只是我自己的配置,你可以尝试构建自己的界面。

导入游戏角色

那么下面,我就来介绍一下如何导入游戏角色。

首先你需要准备一张游戏角色,我是用ps画了一张角色图片,如下图所示。

只需要将这张图片拖入到“项目” 窗口就行了,当然,最好使用背景透明的图片,这样在渲染图片的时候看起来就比较自然。

接下来我们需要为角色制作骨骼动画,就是她走路的时候的样子,具体的制作方法我是从下面的视频中学的。

万物皆可骨骼,unity的2d骨骼教程_哔哩哔哩_bilibili

我一共编辑了两套动作,一套是走路的时候的动作,一套是休息的时候的动作,然后我们需要编辑动画器,动画器实际上就是一个状态机,具体的界面如下所示

你只需要按照我的方式连接各个节点就行了。

编辑地图

那么我们有了角色,并且已经编辑好动画了,下一步就是编辑地图了。我们首先需要创建地图对象

然后需要准备放入“平铺调色板” 的素材,素材也是我自己用ps画的。

这张图片的尺寸是256x256,也就是说如果切成64x64的大小,那么可以分成4x4的小块,每一个小块都可以填充地图上的一个小块。

图中绿色部分需要调整成64, 我们导入素材之后点击上图中的蓝色区域的按钮进行切片。

在这之后新建一个调色板,然后将素材拖入即可。

 下面就可以在地图上随心所欲地画图啦。

编写代码

终于到了最核心的部分了,我们编写代码要实现人物的移动和动画状态的改变,一共有两种状态,我们需要设置一个变量来控制动画状态

上图中左边的部分就是编辑参数的窗口,我们设定初始值为0。在这之后,你还需要为每个动画设定装换条件

 做完这些准备后,我们就开始编写代码了。你需要在角色对象汇总添加脚本组件,完整的代码如下

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class PlayerController : MonoBehaviour
  5. {
  6. // 人物移动的速度
  7. public float speed = 5;
  8. // 获取移动指令变量
  9. public float moveX;
  10. public float moveY;
  11. // 获取角色的动画器
  12. Animator animator;
  13. // 获取角色的刚体组件
  14. Rigidbody2D rd2d;
  15. // 动画器变量名
  16. string PlayerState = "PlayerState";
  17. // 角色状态表
  18. enum CharState
  19. {
  20. idle = 0,
  21. walk = 1
  22. }
  23. // Start is called before the first frame update
  24. void Start()
  25. {
  26. // 获取动画器
  27. animator = GetComponent<Animator>();
  28. // 获取刚体组件
  29. rd2d = GetComponent<Rigidbody2D>();
  30. }
  31. // Update is called once per frame
  32. void Update()
  33. {
  34. }
  35. void FixedUpdate()
  36. {
  37. // 获取x轴和y轴的移动指令
  38. // 获取水平方向指令
  39. moveX = Input.GetAxisRaw("Horizontal");
  40. // 获取垂直方向指令
  41. moveY = Input.GetAxisRaw("Vertical");
  42. // 获取人物的位置信息
  43. Vector2 p = transform.position;
  44. p.x = p.x + moveX * speed * Time.deltaTime;
  45. p.y = p.y + moveY * speed * Time.deltaTime;
  46. // 将新坐标赋值给物体位置管理属性
  47. transform.position = p;
  48. // 如果有移动就改变动画
  49. if (moveX != 0 || moveY != 0)
  50. {
  51. // 给动画器变量赋值
  52. animator.SetInteger(PlayerState, (int)CharState.walk);
  53. Debug.Log(animator.GetInteger(PlayerState));
  54. } else
  55. {
  56. animator.SetInteger(PlayerState, (int)CharState.idle);
  57. Debug.Log(animator.GetInteger(PlayerState));
  58. }
  59. }
  60. }

 接下来你就可点击开始按钮,试试看你的角色是否动起来啦。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/134850
推荐阅读
相关标签
  

闽ICP备14008679号