过去一天我一直在研究这个剧本。出于某种原因,只要它的动画师处于活动状态,我的角色就不会跳跃。我已经进入了动画(只有一个)并删除了所有对动画的引用,在任何地方放置了一个位置,但问题仍然存在。
我发现如果我使用我正在使用的Co-routine,我可以让我的玩家跳跃。但是,我仍然不习惯使用它们,我无法理解为什么我的玩家一旦加入力量就会摔倒在地。并且我的播放器仅在单击按钮时向上移动。有人可以看看我的剧本并告诉我我做错了吗?
public float jumpSpeed = 100.0f;
public float jumpHeight = 2.0f;
public AudioClip jumpSound;
private GameObject pos;
private bool moving;
private bool isJumping;
void Start()
{
}
// Update is called once per frame
void Update ()
{
if(Input.GetMouseButtonDown(0))// && !moving)
{
isJumping = true;
StartCoroutine(JumpPlayer(gameObject.transform.localPosition));
}
else
{
isJumping = false;
}
}
IEnumerator JumpPlayer(Vector3 startPos)
{
Vector3 jump = new Vector3(transform.localPosition.x, jumpHeight, transform.localPosition.z);
float t = 0f;
t += Time.deltaTime / jumpSpeed;
rigidbody.AddForce(Vector3.up * jumpSpeed);
//gameObject.transform.localPosition = Vector3.Lerp(startPos, jump, 0.5f);
//isJumping = false;
yield return null;
}
答案 0 :(得分:0)
首先,你使用coroutine并没有特别做任何事情 - 因为它最后只有yield return null
,它会在一个帧中运行然后退出。您可以将其设为常规void
功能,并且您不应该看到行为发生任何变化。
删除其他冗余代码,你就是这样:
if(Input.GetMouseButtonDown(0))
{
rigidbody.AddForce(Vector3.up * jumpSpeed);
}
此力仅针对单个帧添加:按下鼠标按钮的帧(如果您使用Input.GetMouseButton
代替,则会看到为多个帧应用的力)。
你说"我的播放器只有在点击按钮时才会向上移动"但是我不清楚为什么会出现问题 - 或许你的意思是玩家应该按住按钮继续向上移动,在这种情况下你应该参考我之前的段落。
玩家不再跌倒的最明显原因与RigidBody
组成部分有关:你有体重吗?拖动设置为合适的值?一种简单的测试方法是在场景开始时将玩家放置在离地面一定距离的位置,并确保在你开始场景时它们落到地面上。
另一个原因可能是您在.AddForce
周期内使用Update
的默认覆盖。此方法的默认行为在FixedUpdate
调用期间强制使用,您可能会发现使用ForceMode.Impulse
或ForceMode.VelocityChange
会为您提供您正在寻找的结果。