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