我正在使用Unity3D制作游戏“ Rolling Sky”的副本,您可以在Google / Apple应用商店中找到它。我能够制作一个简单的地板,使球继续前进,也能够使球(Player)左右移动。将球前后移动两次后,它开始在空中漂浮,最终看起来像是改变了轴心。
我想出了一些我认为可行的替代方法,但是我想出了使它正常运行的代码很困难。
1)完全不要旋转球。只要让它平稳地前后移动即可。 ^^可能是我能想到的最好的解决方案。
或
2)使用CharacterController可以完全控制球对不同事件,场景等的反应。 ^^这可能是我不得不猜测的最必要和最困难的事情。
或
3)每次我向左或向右移动时,将球移动x个像素。 ^^我认为这会比现在产生更多的故障。
public class PlayerController : MonoBehaviour
{
public float speed;
void Update()
{
transform.Translate(Vector3.right * speed * Input.GetAxis("Horizontal") * Time.deltaTime);
}
}
编辑: 我能够提供自己的答案,但是如果有人有其他选择,请随时发布您的解决方案!
答案 0 :(得分:0)
为防止玩家的球漂浮在天空中,不需要其他代码。只需转到播放器上的“刚体”组件,然后展开“约束”菜单。接下来,选中要冻结旋转的轴框,以防止球如图所示旋转。
点击链接查看图片 here。
在这种情况下,我没有将球冻结在x轴上,因为我最终希望对其进行动画处理以使其旋转,就像它向前滚动一样。
答案 1 :(得分:0)
transform.Translate
和
Vector3.right
transform.Translate
将直接移动球而无需考虑旋转。在平移时,您需要考虑对象的旋转。您还可以使用物理引擎并使用Rigidbody.MovePosition
来强制定位,或使用Rigidbody.AddForce
来利用物理相互作用。
Vector3.right
将使用等于Vector3(1,0,0)的常量值。这与对象的旋转或朝向无关。
我建议浏览Unity's tutorial for a ball-roller,看看它们如何用用户控制的球来完成用户输入的任务。