[英]How can i stop a character from double jumping?
我試圖使角色在空中停止跳動,但問題是當與牆壁碰撞時角色可能跳動。
所以我嘗試過一段時間才能使角色在下面的腳本中再次跳躍,但是由於某種原因,它不起作用。
如果有人有任何更有效的方式來做到這一點,我一定會感激的。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
public float UpSpeed;
public Rigidbody rb;
public float horizonSpeed;
public bool isGrounded;
public float gravInc = 50;
public int counter;
public float DownSpeed = 50;
public int jumpCount = 0;
public float secCount = 0;
public bool validUp = true;
public float sec;
public void OnCollisionStay(Collision collision)
{
isGrounded = true;
}
public void OnCollisionExit(Collision collision)
{
isGrounded = false;
}
public void Start()
{
rb = GetComponent<Rigidbody>();
}
private void Update()
{
if (secCount == (sec))
{
validUp = true;
}
sec = Time.time;
if (Input.GetKeyDown ("up") && isGrounded == (true) && validUp == (true))
{
rb.AddForce(transform.up * UpSpeed);
secCount = 0;
validUp = false;
secCount = sec + 3;
}
else if(Input.GetKeyDown ("right"))
{
horizonSpeed = 200;
rb.AddForce(transform.right * horizonSpeed);
}
else if (Input.GetKeyDown ("left"))
{
horizonSpeed = -200;
rb.AddForce(transform.right * horizonSpeed);
}
}
}
您必須制作一個與玩家(也較小)的腳不同的對撞機。 使其觸發。
並使用OnTriggerStay將其isGrounded變量設置為true,並使用OnTriggerExit將其設置為false。
void OnTriggerStay(Collider other){
isGrounded = true;
}
void OnTriggerExit(Collider other){
isGrounded = false;
}
我之前遇到過此問題-在必須接觸以跳轉的所有有效表面上定義一個不可見的“有效接地”層將比計時更有用。
如果您僅使用計時,則從懸崖或山坡上跳下來的人可能會跳一倍(或三倍!)。 牆壁上將沒有有效的表面對象,因此玩家無法跳到牆壁上。
通過使用有效的表面標識符,您還可以制作被設計為向下滑動而不允許跳躍的表面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.