我一周前开始使用unity和C#进行编码,所以如果这是一个愚蠢的问题,请原谅我。
我制作了一个统一的蹦床,玩家跳到上面,它用简单的if语句和一个计数整数把玩家弹起来,每次都弹得更高。
我的playerController脚本是在统一检查器中设置的。蹦床按计划运行,运行良好。
然而,我希望球员在离开蹦床并触地后能重新设置他们的动量。
目前,在离开蹦床并回到蹦床上后,它们的弹跳高度与离开蹦床时一样高。因此,需要重置计数整数。
我想通过对球员的简单检查来做到这一点;被接地";函数,如果为true,则将蹦床跳跃计数重置为0。
但这不起作用。我不知道为什么。对我来说,这似乎是应该的。isgrounded正在评估为true;否则如果(playerFP.groundCheck==true(";未激活。
这是我的代码:
public class Trampoline : MonoBehaviour
{
public PlayerMovement1stPerson playerFP;
[SerializeField] int jumpCount = 0;
private void OnTriggerEnter(Collider collision)
{
if (jumpCount == 0 && collision.gameObject.tag == "Player" )
{
Debug.Log("Bounce 1 activated");
playerFP.velocity.y = 5;
jumpCount ++;
}
else if (jumpCount == 1 && collision.gameObject.tag == "Player")
{
playerFP.velocity.y = 10;
jumpCount ++;
}
else if (jumpCount == 2 && collision.gameObject.tag == "Player")
{
playerFP.velocity.y = 15;
jumpCount ++;
}
else if (jumpCount >= 3 && collision.gameObject.tag == "Player")
{
Debug.Log("Max Bounce");
playerFP.velocity.y = 15;
}
else if (playerFP.groundCheck == true)
{
Debug.Log("Bounces reset");
jumpCount = 0;
}
}
}
如果有任何提示,我将不胜感激。
您的弹跳(和地面检查代码(在蹦床的OnTriggerEnter
方法中运行。这意味着只有当玩家进入蹦床的触发器时才会进行检查,而不是当玩家降落在任何地面上时。
将if检查移到OnTriggerEnter
方法之外。蹦床脚本中的Update()
方法可以工作,但最干净的实现是将弹跳信息存储在玩家中,而不是每个蹦床实例中。(这也允许玩家在多个蹦床上弹跳,而不会失去它们之间的高度(