首页 > 其他分享 >Unity引擎2D游戏开发,实现人物下蹲逻辑和动画

Unity引擎2D游戏开发,实现人物下蹲逻辑和动画

时间:2023-12-15 15:56:36浏览次数:27  
标签:动画 isCrouch Vector2 碰撞 2D Unity Offset Size

将下蹲动画创建进人物中

在Animation窗口中的左侧,新建BlueCrouchStart动画时间轴,然后将下蹲动画拖入时间轴中
62,63,64都是下蹲中的动画,但是64号是下蹲动作完毕后的静止动画,因为不拖入时间轴中,单独为其建立一个时间轴

image

为64号下蹲动画完毕的静止动画单独创建一个时间轴,并命名为BlueCrouchIdle
image

创建次级状态控制机(Sub State Machine),并将所有的下蹲相关动画创建在内

在Animator窗口中,右击鼠标,选中Create Sub-State Machine,并命名为Crouch
image

image

双击进入Crouch,将下蹲相关动画从Animations→Player文件夹拖入Crouch窗口内
image

新建一个控制变量并将其写入C#人物控制代码中

下蹲动作是在Y轴进行反方向的一个动作朝向(↓方向),所以从Gameplay控制器中获得的InputDirection是恒定为-1。因此,通过这个变量可以进行下蹲动作的判断

新建控制变量isCrouch
image

在PlayerAnimation中SetAnimation()方法里,写入isCrouch变量

animator.SetBool("isCrouch", playerController.isCrouch);

接下来,对isCrouch进行判断,以实现此变量的控制。先在PlayerController中新建公有变量isCrouch

public bool isCrouch;

通过InputDirection的正负值进行判断,并且必须要判断是否在地面,只有在地面才能进行下蹲动作。在Move()方法中写入以下代码

// 下蹲
isCrouch = inputDirection.y < -0.5f && physicsCheck.isGround;

解决碰撞体积的问题

下蹲已经实现,但是碰撞体积却还是站立时的体积。因此需要解决此问题以实现下蹲时碰撞体积变小的功能。

可以观察Player的二维椭圆碰撞盒(Capsule Collider 2D)中的OffsetSize参数。当下蹲时,Size的Y轴数值变小了。但是碰撞盒(Collider)是以中心为基准,Y轴两端一起变小,所以需要调整它的Y轴偏移量(Offset)。让Y轴偏移量(Offset)向下移动。

打开PlayerController C#代码,由于需要修改Offset和Size的值,并且在取消下蹲后,还原Offset和Size的值,因此需要存储原始站立时的Offset和Size值,所以要新建两个变量来存储。

// 原始的碰撞体偏移量
private Vector2 originalOffset;
// 原始的碰撞体大小数值
private Vector2 originalSize;

判断是否开始下蹲动作,如果开始下蹲动作,则同时调整碰撞盒(Collider)的Offset和Size。否则,还原Offset和Size。
碰撞盒(Collider)的调整数值可以根据需要来进行调整。

if (isCrouch)
{
    // 修改碰撞体积大小
    capsuleCollider.offset = new Vector2(-0.05f, 0.80f);
    capsuleCollider.size = new Vector2(0.9f, 1.6f);
} else
{
    capsuleCollider.offset = originalOffset;
    capsuleCollider.size = originalSize;
}

解决下蹲可以移动的问题

当下蹲时,能够进行X轴方向的移动。或者X轴方向移动时能够进行下蹲漂移。这些都是我们不想要的。

传递X轴方向移动的核心代码在PlayerController内,对其进行下蹲判断。
如果已经进行下蹲动作,那么X轴方向和Y轴方向的加速度全部控制成0,使其无法移动。否则就按照原始的数值进行传递。

// 人物移动
if (isCrouch)
{
    rb.velocity = new Vector2(0.0f, 0.0f);
} else
{
    rb.velocity = new Vector2(xDirection * speed * Time.fixedDeltaTime, rb.velocity.y);
}

标签:动画,isCrouch,Vector2,碰撞,2D,Unity,Offset,Size
From: https://www.cnblogs.com/xinlindeyu/p/17903522.html

相关文章

  • Unity3D ugui适配iPhoneX的齐刘海屏幕详解
    Unity3D是一款强大的游戏开发引擎,广泛应用于手机游戏开发。随着苹果推出了iPhoneX,这款全面屏手机的出现给游戏开发者带来了新的适配问题。本文将详解如何在Unity3D中适配iPhoneX的齐刘海屏幕,并给出相应的技术详解和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习......
  • Unity shader 里面使用数组
    很多人不知道Unityshader是支持通过C#脚本,往shader脚本里写入数组的。我不知道Properties里面怎么写,但是可以用C#代码往里写。数组的总长度似乎最大2048。注意,是所有数组的总长度加一起不能超过2048。比如你写了五个数组,每个数组的长度是100,五个数组的总长度就是500。不是......
  • Unity引擎2D游戏开发,实现跳跃动画
    由于跳跃动画分为了很多个部分,所以需要对每个部分进行重新命名。接着,再将此动画分为两大类,一类空中动作(Jumpanimation),一类落地动作(Landinganimation)选择Player人物,在下方Animation中,新建动画动画新建和命名规则,根据guide内的颜色分类来进行新建动画混合树由于动画太多,......
  • Unity引擎2D游戏开发,实现按键行走
    既然是实现按下按键进行一个动作,比如行走动作。那么就需要在InputControl内加入按键,并通过C#代码调用这个按键绑定一个事件来实现此功能在InputControl内加入新的按键打开PlayerInputControl创建一个新的按键组,并绑定Shift(通过Shift键控制行走动作)通过C#代码调用按键,并实......
  • Chat2DB接入文心一言AI教程(原创教程,转载请注明)
    引言关于Chat2DB和文心一言是啥我就不赘述了,由于Chat2DB自带的ai有调用次数限制,所以想着接入百度的文心AI,但是由于网上没有找到相关的教程,此方法是本人研究了一段时间才弄出来的,顺便记录一下备忘,也希望对有同样需求有所帮助!一、注册并实名认证百度智能云账号百度智能云地址:点击......
  • gsap基础-JS动画库
    https://blog.csdn.net/m0_61662775/article/details/131430585https://blog.csdn.net/changbb/article/details/131675810学习文档简介GSAP的全名是GreenSockAnimationPlatform一直发展到今天已经是3.x版本,这是一个适用于现代浏览器的专业Javascript动画库核心语法......
  • Unity3D协议怎样通过应用层来实现可靠性
    Unity3D是一款流行的游戏开发引擎,它提供了丰富的网络功能来支持多人游戏。其中,UDP(UserDatagramProtocol)是一种无连接的传输协议,它提供了高效的数据传输,但不保证数据的可靠性。本文将介绍如何通过应用层来实现UDP协议的可靠性,并给出技术详解和代码实现。对啦!这里有个游戏开发交......
  • Unity3D 如何读取策划给定的Excel表格详解
    前言Unity3D是一款非常流行的游戏开发引擎,它可以帮助开发者快速构建游戏并进行测试和发布。在游戏开发过程中,策划经常会提供一些Excel表格,这些表格包含了游戏中的各种数据,如角色属性、技能效果等等。那么,如何在Unity3D中读取这些Excel表格呢?本文将详细介绍Unity3D如何读取策划给......
  • Unity3D 开发中有那些提升效率的高级技巧详解
    Unity3D是一款强大的游戏开发引擎,它提供了许多功能和工具来帮助开发者提高效率。本文将详细介绍Unity3D开发中的一些高级技巧,包括资源管理、内存优化、代码优化以及性能调优等方面。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发......
  • Unity3D UDP协议怎样通过应用层来实现可靠性
    Unity3D是一款流行的游戏开发引擎,它提供了丰富的网络功能来支持多人游戏。其中,UDP(UserDatagramProtocol)是一种无连接的传输协议,它提供了高效的数据传输,但不保证数据的可靠性。本文将介绍如何通过应用层来实现UDP协议的可靠性,并给出技术详解和代码实现。对啦!这里有个游戏开发交......