首页 > 解决方案 > 我在使用统一制作的游戏中有一种滞后,这与地面检查有关

问题描述

当跑步者接触地面时,布尔值不会在他在地面上的整个期间保持真实

我为跑步者制作了两个 boxcolliders2D :一个与地面碰撞,另一个设置为触发器以检查他是否接地

这里跑步者与地面发生碰撞,但布尔值未设置为真

我对地面精灵做了同样的事情

但是当速度等于 0 时它工作正常......当然它是无用的

哦,还有一件事,尽管地面预制件不断生成跑步者 getenter 代码,这里卡在某个点上……当他这样做时,它被标记为他已接地……知道如何解决卡住的延迟吗?PS:我试图改变地面的boxcollider2D大小,但它没有工作:(((

这是与地面检查相关的代码部分(它应该也可以播放很好的脚步声)

 private void OnTriggerEnter2D(Collider2D collision)
{
    if(collision.tag == "Ground")
    {
        isGrounded = true;
        footSteps.Play();
    }
}

private void OnTriggerExit2D(Collider2D collision)
{
    if (collision.tag == "Ground")
    {
        isGrounded = false;
        footSteps.Stop();
    }
}

也许如果我只是向您展示整个代码,您将能够更好地帮助我(我希望我的代码不是那么混乱)

public float speed;
public float jumpForce = 10f;
public float speedMultiplier;
public float speedIncreasedMilestone;
private float speedMilestoneCount;

private Rigidbody2D rb;
private Collider2D myCollider;

public Animator anim;
public AudioSource footSteps;
public bool isGrounded = false;



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

}


void Update()
{
    if(transform.position.x < speedMilestoneCount)
    {
        speedMilestoneCount += speedIncreasedMilestone;

        speedIncreasedMilestone = speedIncreasedMilestone * speedMultiplier;
        speed = speed * speedMultiplier;
    }

   if(isGrounded == true)
    {
        rb.velocity = new Vector2(-speed * Time.deltaTime, rb.velocity.y);
        anim.SetBool("Condition",true);
    }
   if(Input.GetKeyDown(KeyCode.Space) && isGrounded == true)
    {
        anim.SetBool("Condition", false);
        rb.velocity = new Vector2(rb.velocity.x,jumpForce);
    }     
}

private void OnTriggerEnter2D(Collider2D collision)
{
    if(collision.tag == "Ground")
    {
        isGrounded = true;
        footSteps.Play();
    }
}

private void OnTriggerExit2D(Collider2D collision)
{
    if (collision.tag == "Ground")
    {
        isGrounded = false;
        footSteps.Stop();
    }
}

}

标签: c#unity3d

解决方案


每当您遇到此问题时(即某项操作花费的时间超出预期),您可以选择两种策略:

  1. 检查您是否可以不那么频繁地执行该操作
  2. 检查您是否可以更快地执行操作

在这种情况下,您似乎只需要在玩家尝试执行跳跃时知道玩家是否接地。所以这就是你想要进行检查的时候。


推荐阅读