前言

那么这次文章,来编写关于主角的移动和奔跑功能;同样,如前面的文章所述,因编写教程写了很多遍,本文章只写出关键部分;想了解详细的教程,在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 framevoid 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){// 按下左Shiftif (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);}}}

结语

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

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

  1. Unity简单2D游戏开发

    Unity简单2D游戏开发 前言: 近日比较无聊,在b站找了一个up主,跟着他的教程来做游戏--开发一个简单的2D游戏 用 Tilemap 绘制场景 新建一个2D项目,在Unity Asset Sto ...

  2. Unity 2D 游戏开发解决方案大全

    Unity 2D 游戏开发解决方案大全 一些官方腔 这篇文章会是一个大纲模式,致力于,为刚入坑的小白,对于一些常见的 Unity 2D 开发问题给出解决方案(啊,尤其是我) 一些方案可能并非最优解,但 ...

  3. Unity 2D游戏开发教程之摄像头追踪功能

    Unity 2D游戏开发教程之摄像头追踪功能 上一章,我们创建了一个简单的2D游戏.此游戏中的精灵有3个状态:idle.left和right.这看起来确实很酷!但是仅有的3个状态却限制了精灵的能力,以 ...

  4. Unity 2D游戏开发教程之游戏中精灵的跳跃状态

    Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...

  5. Unity 2D游戏开发教程之为游戏场景添加多个地面

    Unity 2D游戏开发教程之为游戏场景添加多个地面 为游戏场景添加多个地面 显然,只有一个地面的游戏场景太小了,根本不够精灵四处活动的.那么,本节就来介绍一种简单的方法,可以为游戏场景添加多个地面. ...

  6. Unity 2D游戏开发教程之精灵的死亡和重生

    Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...

  7. ​Unity 2D游戏开发教程之2D游戏的运行效果

    ​Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑 ...

  8. Unity 2D游戏开发教程之使用脚本实现游戏逻辑

    Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...

  9. Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍

    Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介绍Unity的下 ...

最新文章

  1. @responseBody注解的使用
  2. python导入函数模块 为什么会打印两次_5.1.2Python从模块导入函数
  3. 子组件上下结构布局自适应父组件宽度高度
  4. Django 的简单ajax
  5. 数据可视化分析票房数据报告_票房收入分析和可视化
  6. Spring Cloud与Spring Boot版本匹配关系
  7. tomcat设置context不生效_后端服务:关于Tomcat相关面试题,看懂这篇就够了(有深度)...
  8. 【口令破解】远程口令破解和本地口令破解(crunch 字典工具和hydra工具)
  9. 英语期刊写作-通往国际学术舞台的阶梯第六章答案
  10. 非因解读 | 单细胞空间蛋白质组分析技术揭示乳腺癌循环肿瘤细胞(CTC)与肿瘤异质性及肿瘤免疫的关系
  11. Java中的frontcolor_front的用法总结大全
  12. 【数据结构】循环链表(circular linked list) 双向链表(doubly linked list)
  13. 便携智能音箱小问mini发布,李志飞:要做苹果一样的公司
  14. 用python制作电子时钟包装_使用电子水墨屏和树莓派制作的时钟,Epaper_clock
  15. 如何用 Roam Research 备课?
  16. 桌面上计算机程序包能删吗,桌面上的软件怎么删除教程【图文】
  17. 看不到同一个网络下的其他计算机,看不到局域网其他计算机怎么办
  18. web前端自学该怎么规划学习
  19. IDEA开发中包(package)的作用
  20. ArrList 源码拜读

热门文章

  1. 阿里云ECS服务器实例挂载数据盘步骤
  2. Ubuntu下U盘文件只读的解决办法
  3. 蜜蜂剪辑 Apowersoft BeeCut 1.6.8.14 让剪辑更简单,全民都会用的视频剪辑软件
  4. ‘adb‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。(android studio)
  5. 【渝粤教育】电大中专新媒体营销实务 (5)作业 题库
  6. Mac上安装Navicat Premium及破解
  7. 一开启虚拟机电脑就关机
  8. 程序设计、数据结构、编译相关图灵奖得主简介之一
  9. PS怎么做流线光效人物动图效果
  10. Eclipse中打开Web Services Explorer