C# 平台和Unity3D中的球类游戏-位置使球从平台上落下
我想做一个游戏,你在一个平台上上上下弹起一个球。我在球上添加了一个刚体组件,使球“使用重力”,并且球准直器中有材料,因此它将具有“反弹”或恢复系数。球在一个固定的平台/平面上很好地跟随重力运动 之后,我尝试添加平台组件。顺便说一句,这个组件只是在Y轴上上下移动(就好像有人用球拍上下弹起乒乓球一样)。为了让它上升,我使用了这个C#脚本C# 平台和Unity3D中的球类游戏-位置使球从平台上落下,c#,unity3d,C#,Unity3d,我想做一个游戏,你在一个平台上上上下弹起一个球。我在球上添加了一个刚体组件,使球“使用重力”,并且球准直器中有材料,因此它将具有“反弹”或恢复系数。球在一个固定的平台/平面上很好地跟随重力运动 之后,我尝试添加平台组件。顺便说一句,这个组件只是在Y轴上上下移动(就好像有人用球拍上下弹起乒乓球一样)。为了让它上升,我使用了这个C#脚本 if (Input.GetKeyDown(KeyCode.W)) { heldDownW = true; } if (Input.GetKeyUp(KeyC
if (Input.GetKeyDown(KeyCode.W))
{
heldDownW = true;
}
if (Input.GetKeyUp(KeyCode.W))
{
heldDownW = false;
}
if (heldDownW)
{
transform.position = new Vector3(transform.position.x, (transform.position.y + 1f), transform.position.z);
}
这只是检查是否按住了W键,将平台向上移动。我在S键上也有同样的东西。平台移动部件工作正常。然而,这是我的问题。在固定平台上,或在我未按W或S键时,球可以正常工作。它反弹并服从重力但是,当我在移动平台时,球会直接穿过平台。
我想我知道其中的原因——这就是转变的立场。它只是简单地移动平台,即使球仍在空中,从而通过球改变平台的位置。然而,我不知道如何从这里开始。我尝试使用OnCollisionCenter,但我不知道在OnCollisionCenter方法中放什么,因为重力/碰撞组件没有在脚本中编码。无论平台是否移动,我都希望球在平台上反弹。任何帮助都将不胜感激。谢谢。您必须将刚体连接到平台上,然后在inspector中将“IsKinetic”字段设置为“true” 然后需要使用RidigBody.MovePosition()而不是transform.position
if(heldDownW)
{
rigidbody.MovePosition(new Vector3(transform.position.x, (transform.position.y + 1f), transform.position.z));
}
另外,根据我读到的内容,最好将if块改为FixedUpdate(),因为FixedUpdate()用于物理相关的东西
void Update()
{
if(Input.GetKeyDown(KeyCode.W))
{
heldDownW = true;
}
if(Input.GetKeyUp(KeyCode.W))
{
heldDownW = false;
}
}
void FixedUpdate()
{
if(heldDownW)
{
rigidbody.MovePosition(new Vector3(transform.position.x, (transform.position.y + 10f * Time.deltaTime), transform.position.z));
}
}
另一件事是在进行速度计算时使用Time.deltaTime:
if(heldDownW)
{
rigidbody.MovePosition(new Vector3(transform.position.x, (transform.position.y + 10f * Time.deltaTime), transform.position.z));
}
通过使用Time.deltaTime,你就像在说“每秒向上移动10米”
如果不使用Time.deltaTime,则每帧移动10米
这不是你想要的