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

问题描述 投票:0回答:1

更新:继续本书后,我明白了。它在书中说的是Unity的盒子碰撞器限制。所以我想我们可以关闭这张票。

书中说的是:

“现在,如果你在你的瓷砖和你的玩家角色上使用盒子对撞机,你可能会发现你偶尔会遇到你不应该做的事情 - 你的角色可能会停止移动并且压在空气中。通常问题发生在紧密定位的瓷砖之间的顶点,不幸的是,这似乎是Unity本身的一个小问题,而不是你可以修复的任何东西(显然,它是在4.3.1中引入的,并且尚未得到解决)如果你确实遇到这个问题,只需尝试使用Squarey自己的多边形对撞机,通过单击编辑碰撞器稍微改变形状,然后在轮廓中创建一个小凹凸,如图5-9所示,这样你就可以“滑过“这些想象中的障碍”。

在一本书之后,我使用Unity 2D创建了一个简单的游戏。它包括一个名为'Player'的GameObject,它可以做一些简单的动作,当按下我的PC的leftArrow / rightArrow / Space键时向左/右/跳跃。还有一些瓷砖作为平台地面。

我发现一个问题,当玩游戏时,首先播放器会掉落在平台上,然后当我按下右箭头键时,它没有任何效果。但是如果按左键或空格键,播放器将向左或跳转,然后右键单击将生效...

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

Issue1_000

Issue1_001

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

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);
        }
    }
}
unity3d 2d move gameobject
1个回答
1
投票

好的,让我关闭这个问题。玩家在移动过程中偶尔停止的原因是因为Box Collider的限制。解决方法可能是使用多边形对撞机来改变形状,这就是本书所说的内容。

当然我试试我的项目,它实际上是有效的。谢谢大家,现在这个案子已经关闭了,因为游戏的兴趣,我将逐步学习Unity!

© www.soinside.com 2019 - 2024. All rights reserved.