更新:继续本书后,我明白了。它在书中说的是Unity的盒子碰撞器限制。所以我想我们可以关闭这张票。
书中说的是:
“现在,如果你在你的瓷砖和你的玩家角色上使用盒子对撞机,你可能会发现你偶尔会遇到你不应该做的事情 - 你的角色可能会停止移动并且压在空气中。通常问题发生在紧密定位的瓷砖之间的顶点,不幸的是,这似乎是Unity本身的一个小问题,而不是你可以修复的任何东西(显然,它是在4.3.1中引入的,并且尚未得到解决)如果你确实遇到这个问题,只需尝试使用Squarey自己的多边形对撞机,通过单击编辑碰撞器稍微改变形状,然后在轮廓中创建一个小凹凸,如图5-9所示,这样你就可以“滑过“这些想象中的障碍”。
在一本书之后,我使用Unity 2D创建了一个简单的游戏。它包括一个名为'Player'的GameObject
,它可以做一些简单的动作,当按下我的PC的leftArrow / rightArrow / Space键时向左/右/跳跃。还有一些瓷砖作为平台地面。
我发现一个问题,当玩游戏时,首先播放器会掉落在平台上,然后当我按下右箭头键时,它没有任何效果。但是如果按左键或空格键,播放器将向左或跳转,然后右键单击将生效...
这个问题花了我几个小时!搜索互联网但没有找到答案。我发现的一个线索是,当我取消选中Freeze Rotation
下的RigidBody2D
选项时,右移有效,但我不知道为什么。
这是我的代码,伙计们,我们的帮助将不胜感激!
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);
}
}
}
好的,让我关闭这个问题。玩家在移动过程中偶尔停止的原因是因为Box Collider的限制。解决方法可能是使用多边形对撞机来改变形状,这就是本书所说的内容。
当然我试试我的项目,它实际上是有效的。谢谢大家,现在这个案子已经关闭了,因为游戏的兴趣,我将逐步学习Unity!