c# - 如何阻止我的角色在我的脚本中无限跳跃?
问题描述
这是为控制我的角色移动而编写的移动脚本。这取决于他的 github 上的 Brackeys 2d 控制器脚本,所以如果问题出在哪里,您应该能够查看它,但因为我相信问题出在这个脚本的某个地方。
我决定展示这个。我的角色可以反复跳跃,我不知道问题是什么,所以我会很感激任何帮助。
public CharacterController2D controller;
public Animator animator;
public float runSpeed = 40f;
float horizontalMove = 0f;
bool jump = false;
void Update()
{
horizontalMove = Input.GetAxisRaw("Horizontal") * runSpeed;
animator.SetFloat("speed", Mathf.Abs(horizontalMove));
if (Input.GetButtonDown("Jump"))
{
jump = true;
animator.SetBool("IsJumping", true);
}
}
public void OnLanding()
{
animator.SetBool("IsJumping", false);
jump = false;
}
void FixedUpdate()
{
controller.Move(horizontalMove * Time.fixedDeltaTime, crouch, jump);
jump = false;
}
解决方案
我相信您的问题是永远不会调用 OnLanding() 函数。只有在跳跃动画剪辑的某一点添加了动画事件时,它才会起作用。你知道如何调用 OnLanding 动画事件吗?
此链接中有一个非常好的动画事件教程 https://docs.unity3d.com/Manual/script-AnimationWindowEvent.html
基本上这个动画事件应该插入到跳跃动画结束附近的某个地方。仅当您首先正确连接了跳跃和着陆动画剪辑之间的过渡时,这才有效。假设你做到了,要么插入这个动画事件,要么你可以尝试另一种方法(更有效但有点困难)。
物理重叠法:
第二种方法要求您使用名为 grounded 的 bool 变量,而不是 bool 变量 jump。(我知道它们都是布尔变量,但它们的用途不同)。从那里您可以初始化基于名为overlapcircle() 的内置函数的bool 变量。此函数将要求您声明您将事先声明的其他三个局部变量:图层蒙版、半径和点。
从那里,您可以确保您的条件语句包含一个附加条件(如果接地等于真)。
有关基于层的碰撞检测的更多信息,请阅读本文档
https://docs.unity3d.com/Manual/LayerBasedCollision.html
如果我说的话似乎不清楚,请随时提出任何问题。
推荐阅读
- node.js - Heroku Container:stderr:“gcc:尝试执行'cc1plus'时出错:execvp:没有这样的文件或目录
- vba - PATHS:尾随反斜杠还是不尾随反斜杠?
- powershell - Powershell - 合并两个 Note 属性
- events - rpi4 add_event_detect 事件触发器
- javascript - 在 React Native 中更新屏幕上的内容会使动画组件冻结
- c# - 从 VB6 中读取 C# dll
- sql - 操作数类型错误:日期与 int 不兼容
- css - CSS Grid Nesting 导致子网格从父网格单元格中溢出
- amazon-web-services - 是否有任何 RDS 的 cloudwatch 警报指标来检查连接问题?
- apache-kafka - 如何迁移 Confluent 的 Apache Kafka Schema Registry < 5.2.0?