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

写这个系列的目的

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

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));
        }
    }




}

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

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值