【2d游戏开发】实现主角的移动,移动动画变换和奔跑加速
前言
那么这次文章,来编写关于主角的移动和奔跑功能;同样,如前面的文章所述,因编写教程写了很多遍,本文章只写出关键部分;想了解详细的教程,在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游戏开发】实现主角的移动,移动动画变换和奔跑加速相关推荐
- Unity简单2D游戏开发
Unity简单2D游戏开发 前言: 近日比较无聊,在b站找了一个up主,跟着他的教程来做游戏--开发一个简单的2D游戏 用 Tilemap 绘制场景 新建一个2D项目,在Unity Asset Sto ...
- Unity 2D 游戏开发解决方案大全
Unity 2D 游戏开发解决方案大全 一些官方腔 这篇文章会是一个大纲模式,致力于,为刚入坑的小白,对于一些常见的 Unity 2D 开发问题给出解决方案(啊,尤其是我) 一些方案可能并非最优解,但 ...
- Unity 2D游戏开发教程之摄像头追踪功能
Unity 2D游戏开发教程之摄像头追踪功能 上一章,我们创建了一个简单的2D游戏.此游戏中的精灵有3个状态:idle.left和right.这看起来确实很酷!但是仅有的3个状态却限制了精灵的能力,以 ...
- Unity 2D游戏开发教程之游戏中精灵的跳跃状态
Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...
- Unity 2D游戏开发教程之为游戏场景添加多个地面
Unity 2D游戏开发教程之为游戏场景添加多个地面 为游戏场景添加多个地面 显然,只有一个地面的游戏场景太小了,根本不够精灵四处活动的.那么,本节就来介绍一种简单的方法,可以为游戏场景添加多个地面. ...
- Unity 2D游戏开发教程之精灵的死亡和重生
Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...
- Unity 2D游戏开发教程之2D游戏的运行效果
Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑 ...
- Unity 2D游戏开发教程之使用脚本实现游戏逻辑
Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态. ...
- Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍
Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介绍Unity的下 ...
最新文章
- @responseBody注解的使用
- python导入函数模块 为什么会打印两次_5.1.2Python从模块导入函数
- 子组件上下结构布局自适应父组件宽度高度
- Django 的简单ajax
- 数据可视化分析票房数据报告_票房收入分析和可视化
- Spring Cloud与Spring Boot版本匹配关系
- tomcat设置context不生效_后端服务:关于Tomcat相关面试题,看懂这篇就够了(有深度)...
- 【口令破解】远程口令破解和本地口令破解(crunch 字典工具和hydra工具)
- 英语期刊写作-通往国际学术舞台的阶梯第六章答案
- 非因解读 | 单细胞空间蛋白质组分析技术揭示乳腺癌循环肿瘤细胞(CTC)与肿瘤异质性及肿瘤免疫的关系
- Java中的frontcolor_front的用法总结大全
- 【数据结构】循环链表(circular linked list) 双向链表(doubly linked list)
- 便携智能音箱小问mini发布,李志飞:要做苹果一样的公司
- 用python制作电子时钟包装_使用电子水墨屏和树莓派制作的时钟,Epaper_clock
- 如何用 Roam Research 备课?
- 桌面上计算机程序包能删吗,桌面上的软件怎么删除教程【图文】
- 看不到同一个网络下的其他计算机,看不到局域网其他计算机怎么办
- web前端自学该怎么规划学习
- IDEA开发中包(package)的作用
- ArrList 源码拜读
热门文章
- 阿里云ECS服务器实例挂载数据盘步骤
- Ubuntu下U盘文件只读的解决办法
- 蜜蜂剪辑 Apowersoft BeeCut 1.6.8.14 让剪辑更简单,全民都会用的视频剪辑软件
- ‘adb‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。(android studio)
- 【渝粤教育】电大中专新媒体营销实务 (5)作业 题库
- Mac上安装Navicat Premium及破解
- 一开启虚拟机电脑就关机
- 程序设计、数据结构、编译相关图灵奖得主简介之一
- PS怎么做流线光效人物动图效果
- Eclipse中打开Web Services Explorer