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!
更新: 进一步阅读这本书后,我明白了原因。这是它在书中所说的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!