Unity:游戏对象第一次无法向右移动我按下键盘的右箭头

Unity: Game Object cannot move to right for the first time I press right arrow of keyboard

更新: 进一步阅读这本书后,我明白了原因。这是它在书中所说的Unity的盒子碰撞器限制。所以我想我们可以关闭这张工单。

书上说的:

“现在,如果你在你的瓷砖和你的玩家角色上使用盒子碰撞器,你可能会发现 你偶尔会卡在你不应该做的事情上——你的角色可能会停止移动并挤压 稀薄的空气。问题通常发生在位置很近的图块之间的顶点,不幸的是, 这似乎是 Unity 本身的一个小问题,而不是您可以修复的任何问题(显然,它是 在 4.3.1 中引入,截至撰写本文时尚未解决)。 如果你确实遇到了这个问题,只需尝试为 Squarey 自己使用多边形碰撞器,改变 通过单击 Edit Collider 稍微调整形状,然后在轮廓中创建一个小凸起,如图 5-9 所示,这样 你可以“滑”过这些想象中的障碍。

看完一本书后,我使用 Unity 2D 创建了一个简单的游戏。它包括一个名为 'Player' 的 GameObject,它可以执行一些简单的操作,按 leftArrow/rightArrow[= 时移动到 left/right/jump 43=]/Space 我电脑的密钥。还有一些地砖作为站台地面。

我发现一个问题,在玩游戏的时候,先是Player掉落在平台上,然后按右箭头键,没有任何效果。但是如果我按下 Left Key 或 Space, Player 会向左或跳跃然后 Right点击会生效...

这个问题花了我好几个小时! 搜索互联网但没有找到答案。我发现的一个线索是,当我取消选中 RigidBody2D 下的 Freeze Rotation 选项时,右移就起作用了,但我还不知道为什么。

这是我的代码,你们的帮助将不胜感激!

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

public class Player : MonoBehaviour
{

    public Rigidbody2D rb;
    public int moveSpeed;
    public int jumppower;
    public Transform groundCheck;
    public float groundCheckRadius;
    public LayerMask whatIsGround;
    private bool onGround;


    // Use this for initialization
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    private void FixedUpdate()
    {
        onGround = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius,
            whatIsGround);
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            rb.velocity = new Vector2(-moveSpeed, rb.velocity.y);
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            rb.velocity = new Vector2(moveSpeed, rb.velocity.y);
        }

        if (Input.GetKey(KeyCode.Space) && onGround)
        {
            rb.velocity = new Vector2(rb.velocity.x, jumppower);
        }
    }
}

好的,让我结束这个问题。 Player在移动过程中偶尔会停下来的原因是因为Box Collider的限制。 解决方法可以改用多边形对撞机并更改形状,这就是书中所说的。

当然,我尝试了我的项目,它确实有效。谢谢大家,案件已经结案了,我会出于对游戏的兴趣,一步步学习Unity!