栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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();
        // 获取刚体组件
        rd2d = GetComponent();
    }

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




}

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/308528.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号