黑魂复刻游戏的玩家控制器(跳跃)——Unity随手记(2021.3.29)

本文详细介绍了在Unity中实现游戏跳跃功能的过程,包括跳跃信号的创建、跳跃动画的应用、跳跃时输入的锁定以及跳跃冲量的计算。通过使用StateMachineBehaviour脚本控制动画状态,解决跳跃触发的BUG,并探讨了性能和代码组织的注意事项。
摘要由CSDN通过智能技术生成

今天实现的内容:

跳跃信号

要实现跳跃,首先要实现跳跃的输入。跳跃信号是按下的当场触发的一次性触发控制(Trigger Once Signal)。

public class PlayerInput : MonoBehaviour
{
   
	...

	// 一次性信号
    public bool jump; //跳跃信号
    public bool lastJump; //记录上一次的jump信号 用于和当前jump信号做比对 理解为是否正在跳跃

	...

	    // Update is called once per frame
    void Update()
    {
   
    	...
    	
		// 获取跳跃键输入
        bool newJump = Input.GetKey(keyJump);
        // 这样只有当按下跳跃键时jump会被设置为true 等同于GetKeyDown
        if (newJump != lastJump && newJump)
        {
   
            jump = true;
        }
        else
        {
   
            jump = false;
        }
        lastJump = newJump;
	
    }
}

以上代码如果图便宜可以直接采用GetKeyDown来省略if判断。if判断的功能就是让jump只有在按下跳跃键的时候(不是按住,也不是松开)才为true。

跳跃动画的应用

动画机配置很简单,新增trigger参数jump来作为跳跃条件。

在这里插入图片描述
动画触发目前也很简单。

        // 跳跃动画
        if(pi.jump) anim.SetTrigger("jump");
跳跃时锁死Input

为了让跳跃时不能再控制角色旋转,我们需要将Input在跳跃时锁死。好在之前我们就已经实现了输入模块的软开关(详见:魂类游戏的玩家输入模块)。现在的问题就是何时开关输入模块,我们将使用动画状态机StateMachineBehaviour脚本来实现控制。关于StateMachineBehaviour脚本可以往下翻到 值得注意的 部分,里面有讲到。通过下图展示的办法添加一个StateMachineBehaviour脚本。
在这里插入图片描述
以下是FSMOnEnter 的代码,作用是通过重载OnStateEnter,在动画状态机执行到挂载该脚本的动画状态时向父物体及自身的所有MonoBehavior发送消息调用名叫msg的方法。

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

// 使用SendMessage来在OnStateEnter时调用animator.gameObject上的其它方法
public class FSMOnEnter : StateMachineBehaviour
{
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值