【问题标题】:2D PlayerController in unity统一的 2D PlayerController
【发布时间】:2020-09-09 10:22:03
【问题描述】:

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

这段代码的开头从这里开始:

using System.Collections;

使用 System.Collections.Generic; 使用 UnityEngine;

公共类 PlayerController : 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;
        }     
    }
}

}

【问题讨论】:

    标签: c# unity3d 2d


    【解决方案1】:

    如果此代码是从您的项目中复制和粘贴的,我可以看到您的问题。如果不是,这可能只是放在 SO 上时的意外格式问题。

    让我们逐行浏览这个部分。

    if (isGrounded == true && Input.GetKeyDown(KeyCode.Space))
        isJumpimg = true;
    jumpTimeCounter = jumpTime;
        rb.velocity = Vector2.up * jumpForce;
    {
    
    }
    
    • 您执行 if 条件来检查您是否接地以及是否按下了跳转键
    • 您不能用{} 大括号打开范围。您改为使用一个缩进。当您使用 if 语句执行此操作时,您是在说只有一行与 if 语句相关。第一行之后的任何事情都被视为总是会发生。
    • 您设置了 jumpTimeCounter 变量,如果它位于 if 语句中,通常会很好。
    • 您将刚体的速度设置为Vector2.up * jumpForce。每一帧都会发生这种情况,因为它不在 if 语句中,所以你一加载就飞了。
    • 您使用 {} 打开和关闭一个范围,但其中没有任何内容,并且它没有附加到循环或 if 语句。

    解决办法:把上面的部分改成这个。

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

    并且在将只应该在某些条件下发生的逻辑放在 if 语句或循环控制的范围内时要更加小心。别担心,这是一个常见的学习错误。但现在您可能更清楚,{}(); 等所有语法都可以帮助您告诉编译器您打算让代码做什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 2018-07-11
      • 2012-12-01
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多