赞
踩
最近在学习unity2d游戏制作,这个系列的文章就是想将我学到的知识记录下来,方便自己以后复习回顾。
众所周知,Unity是一个游戏引擎,就我的理解来说,游戏引擎就是封装了计算机底层的接口(如图形化接口),然后封装了一些游戏的常用功能(如获取用户的输入),然后提供了一个方面编辑游戏的图形化界面以及工具的软件集合。
对于开发人员来说,使用游戏引擎就可以避免重复造轮子,可以专注于游戏内容的开发。这就和我们使用python的matplotlib库一样,有了这个库,我们就可以专注于数据本身,而不是去考虑从头开始在窗口中画坐标轴。
下面来介绍Unity开发的基础知识。
Unity的所有对象都被封装成Object类,我的理解是这是所有类的基类(如有不对,欢迎指出)。所有的类都可以在界面中的“层级”窗口查看。
如上图所示,图中黄色框中的就是“层级”窗口,我们所有的对象都可以在这个窗口中检索;图中绿色框是“场景”,“游戏”,“动画器”窗口。这个界面主要是用来编辑游戏界面以及动画的;图中紫色框是“项目”和“控制台”,这是用来管理文件以及查看代码输出的;图中棕色框是“检查器”和“平铺调色板”,“检查器”用来编辑对象属性,“平铺调色板”用来编辑地图。
以上界面只是我自己的配置,你可以尝试构建自己的界面。
那么下面,我就来介绍一下如何导入游戏角色。
首先你需要准备一张游戏角色,我是用ps画了一张角色图片,如下图所示。
只需要将这张图片拖入到“项目” 窗口就行了,当然,最好使用背景透明的图片,这样在渲染图片的时候看起来就比较自然。
接下来我们需要为角色制作骨骼动画,就是她走路的时候的样子,具体的制作方法我是从下面的视频中学的。
万物皆可骨骼,unity的2d骨骼教程_哔哩哔哩_bilibili
我一共编辑了两套动作,一套是走路的时候的动作,一套是休息的时候的动作,然后我们需要编辑动画器,动画器实际上就是一个状态机,具体的界面如下所示
你只需要按照我的方式连接各个节点就行了。
那么我们有了角色,并且已经编辑好动画了,下一步就是编辑地图了。我们首先需要创建地图对象
然后需要准备放入“平铺调色板” 的素材,素材也是我自己用ps画的。
这张图片的尺寸是256x256,也就是说如果切成64x64的大小,那么可以分成4x4的小块,每一个小块都可以填充地图上的一个小块。
图中绿色部分需要调整成64, 我们导入素材之后点击上图中的蓝色区域的按钮进行切片。
在这之后新建一个调色板,然后将素材拖入即可。
下面就可以在地图上随心所欲地画图啦。
终于到了最核心的部分了,我们编写代码要实现人物的移动和动画状态的改变,一共有两种状态,我们需要设置一个变量来控制动画状态
上图中左边的部分就是编辑参数的窗口,我们设定初始值为0。在这之后,你还需要为每个动画设定装换条件
做完这些准备后,我们就开始编写代码了。你需要在角色对象汇总添加脚本组件,完整的代码如下
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class PlayerController : MonoBehaviour
- {
-
-
- // 人物移动的速度
- public float speed = 5;
-
- // 获取移动指令变量
- public float moveX;
- public float moveY;
-
- // 获取角色的动画器
- Animator animator;
-
- // 获取角色的刚体组件
- Rigidbody2D rd2d;
-
- // 动画器变量名
- string PlayerState = "PlayerState";
-
-
- // 角色状态表
- enum CharState
- {
- idle = 0,
- walk = 1
- }
-
-
- // Start is called before the first frame update
- void Start()
- {
- // 获取动画器
- animator = GetComponent<Animator>();
- // 获取刚体组件
- rd2d = GetComponent<Rigidbody2D>();
- }
-
- // Update is called once per frame
- void Update()
- {
-
- }
-
- void FixedUpdate()
- {
- // 获取x轴和y轴的移动指令
- // 获取水平方向指令
- moveX = Input.GetAxisRaw("Horizontal");
- // 获取垂直方向指令
- moveY = Input.GetAxisRaw("Vertical");
-
- // 获取人物的位置信息
- Vector2 p = transform.position;
- p.x = p.x + moveX * speed * Time.deltaTime;
- p.y = p.y + moveY * speed * Time.deltaTime;
-
- // 将新坐标赋值给物体位置管理属性
- transform.position = p;
-
- // 如果有移动就改变动画
- if (moveX != 0 || moveY != 0)
- {
- // 给动画器变量赋值
- animator.SetInteger(PlayerState, (int)CharState.walk);
- Debug.Log(animator.GetInteger(PlayerState));
- } else
- {
- animator.SetInteger(PlayerState, (int)CharState.idle);
- Debug.Log(animator.GetInteger(PlayerState));
- }
- }
-
-
-
-
- }
接下来你就可点击开始按钮,试试看你的角色是否动起来啦。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。