当前位置: 首页 > 知识库问答 >
问题:

统一的2D PlayerController

商飞航
2023-03-14

有人可以告诉我这个代码有什么问题,但我的播放器飞上天了。我刚开始编码,但请帮帮我。

此代码的开头从此处开始:

using System.Collections;

使用系统。集合。泛型;使用UnityEngine

公共类玩家控制器:MonoBehaviour{

private Rigidbody2D rb;
public float speed;
public float jumpForce;
private float moveInput;

private bool isGrounded;
public Transform feetPos;
public float checkRadius;
public LayerMask whatIsGround;

private float jumpTimeCounter;
public float jumpTime;
private bool isJumpimg;


void Start()
{
    rb = GetComponent<Rigidbody2D>();

}

private void FixedUpdate()
{
    moveInput = Input.GetAxisRaw("Horizontal");
    rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);
}

void Update()
{
    isGrounded = Physics2D.OverlapCircle(feetPos.position, checkRadius, whatIsGround);

    if (isGrounded == true && Input.GetKeyDown(KeyCode.Space))
        isJumpimg = true;
    jumpTimeCounter = jumpTime;
        rb.velocity = Vector2.up * jumpForce;
    {

    }

    if (Input.GetKey(KeyCode.Space) && isJumpimg == true)

        if (jumpTimeCounter > 0)
        {
            rb.velocity = Vector2.up * jumpForce;
            jumpTimeCounter -= Time.deltaTime;
        } else
            isJumpimg = false;
    {

        {
        }
        }

    {
        if (Input.GetKeyUp(KeyCode.Space))
        {
            isJumpimg = false;
        }     
    }
}

}

共有1个答案

臧增
2023-03-14

如果这个代码是从你的项目中复制和粘贴的,我可以看到你的问题。如果不是,这可能只是一个意外的格式化问题,当把它放在SO上。

让我们逐行浏览这一节。

if (isGrounded == true && Input.GetKeyDown(KeyCode.Space))
    isJumpimg = true;
jumpTimeCounter = jumpTime;
    rb.velocity = Vector2.up * jumpForce;
{

}
  • 您执行 if 条件以检查您是否接地以及是否按下了跳转键
  • 您不会打开带有 {} 大括号的作用域,而是采用一个缩进。当您使用 if 语句执行此操作时,您表示只有一行与 if 语句相关。第一行之后的任何事情都被视为总是会发生。
  • 您设置了跳转时间计数器变量,如果它位于 if 语句中,则该变量通常没问题。
  • 您将刚体的速度设置为矢量 2.up * 跳跃力。这发生在每一帧,因为它不在if语句中,所以你一加载就飞走了。
  • 使用 {} 打开和关闭作用域,但其中没有任何内容,并且该作用域未附加到循环或 if 语句。

解决方案:将上述部分更改为此部分。

if (isGrounded == true && Input.GetKeyDown(KeyCode.Space))
{
    isJumpimg = true;
    jumpTimeCounter = jumpTime;
    rb.velocity = Vector2.up * jumpForce;
}

在将逻辑放入由if语句或循环控制的范围内时,要更加小心,因为只有在特定条件下才会发生逻辑。别担心,这是学习者常见的错误。但是现在你可能更清楚所有的语法,像< code>{}、< code>()和< code >;可以帮助您告诉编译器您希望代码做什么。

 类似资料:
  • 工具的统一,是为了方便工作流的统一,还有工具使用经验的传承。 团队里的成员,经常需要互相使用对方电脑来讨论问题、查看某段代码、Debug 某个功能,工具统一起来后,你会发现,虽然是别人的电脑,工具使用起来是熟悉的,用起来就跟自己的电脑一样顺手,自然的工作效率就会提高。 硬件:RMBP 15 寸 系统:Mac 版本 10.10 以上 编辑器:Atom or Sublime 编辑器代码格式化:Edit

  • Linux系统服务管理 从CentOS7开始,CentOS的服务管理工具由SysV改为了systemd,但即使是在CentOS7里,也依然可以使用chkconfig这个原本出现在SysV里的命令。 Systemd的设计目标是,为系统的启动和管理提供一套完整的解决方案。 chkconfig服务管理工具 罗列chkconfig所管理的服务 使用chkconfig --list命令可以列出所有的服务及其

  • 我们正在与Unity3d合作开发一个GPS应用程序。< br >在装有Marshmallow 6.0的Android设备上,我们安装它时,它不会要求任何权限。我们已经知道Marshmallow只在运行时请求它们(https://developer . Android . com/training/permissions/requiring . html),但是我们不知道如何修改AndroidMan

  • 问题内容: 我正在为我的PHP / MySQL网站创建一个投票系统,我想确保一个用户只能投票一次。什么是这样做的好方法?到目前为止,我已经想到并半实现了以下内容: 使用IP和表决将单个表决存储在数据库中。这样会造成体积大,但可确保每个用户获得一票。 在用户端存储cookie,以检查他们是否投票。这是最简单的方法,但显然用户只能禁用cookie。 什么是最实用的方法?任何其他建议都值得欢迎。 问题答

  • PX4系统是模块化的架构,这使得它对所有的机器人类型都可以使用同一个代码库。 {% mermaid %} graph LR; Autopilot—>Controller; SafetyPilot—>Controller; Controller—>Mixer; Mixer—>Actuator {% endmermaid %} 基本设备 在机型部分所用到的硬件包括以下基本设备: 1个Taranis P

  • 所以我做了我的游戏,并试图“建立它”。我犯了几个对我来说毫无意义的错误。 以下是错误: UnityEditor. BuildPlayerWindow BuildmetodExctive: 2错误在UnityEditor. BuildPlayerWindow DefaultBuildPlayer. BuildPlayer(Unity编辑器. BuildPlayerOptions选项)[0x00234