【2d游戏开发】实现主角的移动,移动动画变换和奔跑加速

导读:本篇文章讲解 【2d游戏开发】实现主角的移动,移动动画变换和奔跑加速,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

前言

那么这次文章,来编写关于主角的移动和奔跑功能;同样,如前面的文章所述,因编写教程写了很多遍,本文章只写出关键部分;想了解详细的教程,在b站搜索本人录制的2d游戏开发-unity实现系列视频教程

功能说明

本次文章主要实现三个,移动、动画制作和按shift加方向键加速。

unity制作动画

这里只列出需要的动画,不教授如何制作

初始状态动画
在这里插入图片描述
在这里插入图片描述

向上静止动画
在这里插入图片描述
在这里插入图片描述

向下静止动画
在这里插入图片描述
在这里插入图片描述

向左静止动画
在这里插入图片描述
在这里插入图片描述

向右静止动画
在这里插入图片描述
在这里插入图片描述

向上行走动画
在这里插入图片描述
在这里插入图片描述
向下行走动画
在这里插入图片描述
在这里插入图片描述

向左行走动画
在这里插入图片描述
在这里插入图片描述

向右行走动画
在这里插入图片描述

在这里插入图片描述

动画控制

为了控制动画的切换和播放,需要定义变量控制动画的播放,变量名称和动画同名。

在这里我所有变量都为bool类型,只有值true和false

然后在Animator里串联动画关系
关系图如下

在这里插入图片描述

faceLeft、faceRight、faceDown、faceUp的连线都设置为各自名称变量为true
如faceLeft设置faceLeft变量为true
在这里插入图片描述
在这里插入图片描述
lefting、righting、uping和downing的连线关系设置为初始状态的变量为false,各自名称的变量为true,同时其他ing的为false
如lefting:
在这里插入图片描述
在这里插入图片描述

关键代码

说完动画之后,其他就没有什么好说的了,现在直接贴出代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{

    // 获取角色得刚体
    private Rigidbody2D playerRid;
    // 实例化二维向量接收角色坐标
    Vector2 playerVector2 = new Vector2();
    // 获取动画组件
    private Animator playerAnimator;


    // 定义速度
    public float speed = 200;

    void Start()
    {
        playerRid = GetComponent<Rigidbody2D>();
        playerAnimator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        // 变更动画
        ChangePlayerAnim();
    }

    private void FixedUpdate()
    {
        // 角色移动
        playerMove();

    }
    // 移动方法
    void playerMove() {
        // 获取水平方向输入坐标
        playerVector2.x = Input.GetAxisRaw("Horizontal");
        // 获取垂直方向输入坐标
        playerVector2.y = Input.GetAxisRaw("Vertical");
        // 标准化坐标
        playerVector2.Normalize();
        // 将向量赋值给刚体
        playerRid.velocity = speed * playerVector2 * Time.fixedDeltaTime;
        // 加速
        UpMove();

    }
    // 加速
    void UpMove()
    {
    // 判断是否在移动状态
        if (Input.GetAxisRaw("Horizontal") != 0 || Input.GetAxisRaw("Vertical") != 0)
        {
        // 按下左Shift
            if (Input.GetKey(KeyCode.LeftShift))
            {
            	speed = 400;
            }
            else
            {
                speed = 200;
            }
        }
    }
    // 变换动画
    void ChangePlayerAnim() {
        // 左
        if (Input.GetKeyDown(KeyCode.A)) {
            playerAnimator.SetBool("idle",false);
            playerAnimator.SetBool("lefting",true);
            playerAnimator.SetBool("righting",false);
            playerAnimator.SetBool("uping",false);
            playerAnimator.SetBool("downing",false);
            playerAnimator.SetBool("faceLeft",false);
            playerAnimator.SetBool("faceRight",false);
            playerAnimator.SetBool("faceUp",false);
            playerAnimator.SetBool("faceDown",false);
        }

        if (Input.GetKeyUp(KeyCode.A)) {
            playerAnimator.SetBool("idle", false);
            playerAnimator.SetBool("lefting", false) ;
            playerAnimator.SetBool("righting", false);
            playerAnimator.SetBool("uping", false);
            playerAnimator.SetBool("downing", false);
            playerAnimator.SetBool("faceLeft", true);
            playerAnimator.SetBool("faceRight", false);
            playerAnimator.SetBool("faceUp", false);
            playerAnimator.SetBool("faceDown", false);
        }
        // 上
        if (Input.GetKeyDown(KeyCode.W))
        {
            playerAnimator.SetBool("idle", false);
            playerAnimator.SetBool("lefting", false);
            playerAnimator.SetBool("righting", false);
            playerAnimator.SetBool("uping", true);
            playerAnimator.SetBool("downing", false);
            playerAnimator.SetBool("faceLeft", false);
            playerAnimator.SetBool("faceRight", false);
            playerAnimator.SetBool("faceUp", false);
            playerAnimator.SetBool("faceDown", false);
        }

        if (Input.GetKeyUp(KeyCode.W))
        {
            playerAnimator.SetBool("idle", false);
            playerAnimator.SetBool("lefting", false);
            playerAnimator.SetBool("righting", false);
            playerAnimator.SetBool("uping", false);
            playerAnimator.SetBool("downing", false);
            playerAnimator.SetBool("faceLeft", false);
            playerAnimator.SetBool("faceRight", false);
            playerAnimator.SetBool("faceUp", true);
            playerAnimator.SetBool("faceDown", false);
        }

        // 右
        if (Input.GetKeyDown(KeyCode.D))
        {
            playerAnimator.SetBool("idle", false);
            playerAnimator.SetBool("lefting", false);
            playerAnimator.SetBool("righting", true);
            playerAnimator.SetBool("uping", false);
            playerAnimator.SetBool("downing", false);
            playerAnimator.SetBool("faceLeft", false);
            playerAnimator.SetBool("faceRight", false);
            playerAnimator.SetBool("faceUp", false);
            playerAnimator.SetBool("faceDown", false);
        }

        if (Input.GetKeyUp(KeyCode.D))
        {
            playerAnimator.SetBool("idle", false);
            playerAnimator.SetBool("lefting", false);
            playerAnimator.SetBool("righting", false);
            playerAnimator.SetBool("uping", false);
            playerAnimator.SetBool("downing", false);
            playerAnimator.SetBool("faceLeft", false);
            playerAnimator.SetBool("faceRight", true);
            playerAnimator.SetBool("faceUp", false);
            playerAnimator.SetBool("faceDown", false);
        }
        // 下
        if (Input.GetKeyDown(KeyCode.S))
        {
            playerAnimator.SetBool("idle", false);
            playerAnimator.SetBool("lefting", false);
            playerAnimator.SetBool("righting", false);
            playerAnimator.SetBool("uping", false);
            playerAnimator.SetBool("downing", true);
            playerAnimator.SetBool("faceLeft", false);
            playerAnimator.SetBool("faceRight", false);
            playerAnimator.SetBool("faceUp", false);
            playerAnimator.SetBool("faceDown", false);
        }

        if (Input.GetKeyUp(KeyCode.S))
        {
            playerAnimator.SetBool("idle", false);
            playerAnimator.SetBool("lefting", false);
            playerAnimator.SetBool("righting", false);
            playerAnimator.SetBool("uping", false);
            playerAnimator.SetBool("downing", false);
            playerAnimator.SetBool("faceLeft", false);
            playerAnimator.SetBool("faceRight", false);
            playerAnimator.SetBool("faceUp", false);
            playerAnimator.SetBool("faceDown", true);
        }

    }


}

结语

以上为实现主角的移动,移动动画变换和奔跑加速的过程,如需要更详细的教程,请搜索本人的教程视频。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/101145.html

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!