gpt4 book ai didi

c# - Unity 5.1.1 有时会跳过 "Input.GetKeyDown"行

转载 作者:太空宇宙 更新时间:2023-11-03 13:04:02 27 4
gpt4 key购买 nike

我在 Win 64 位机器上使用 Unity 5.1.1,它能够运行我正在创建的游戏。在制作 2D 横向卷轴时,我发现我的角色有时不会在出现提示时跳跃。这是代码:

public float speed;
public float MomentAcc;
private float moveVertical;

private float score;
private float scoreP;

public GameObject wallRight;
public GUIText scoreText;
public bool touching;

void Start() {
MomentAcc = 10;
score = 0;

}

//Jump limiter
void OnCollisionStay2D() {

touching = true;
}

void OnCollisionExit2D() {

touching = false;
}


void Update() {

if (Input.GetKeyDown(KeyCode.W) && touching == true || Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began && touching == true) {

moveVertical = 29;

} else {

moveVertical = 0;

}

}

void FixedUpdate () {


scoreP = GameObject.Find ("Ball").GetComponent<Rigidbody2D> ().position.x + 11;

if(scoreP > score) {

score = score + 10;

}

UpdateScore ();

if(GetComponent<Death>().startGame == true) {



float moveHorizontal = 5;


Vector2 forward = new Vector2 (moveHorizontal, 0);
Vector2 jump = new Vector2 (0, moveVertical);


//Maxspeed limit

GetComponent<Rigidbody2D> ().AddForce (moveVertical * jump);


speed = moveHorizontal * MomentAcc * Time.deltaTime * 5;



if (GetComponent<Rigidbody2D> ().velocity.x < 7.000000) {


GetComponent<Rigidbody2D> ().AddForce (Vector2.right * speed);




if(GameObject.Find ("wallRight").GetComponent<wallRightScript>().wallJumpRight == true) {

GetComponent<Rigidbody2D> ().AddForce (new Vector2 (-420, 300));


}

if(GameObject.Find ("wallLeft").GetComponent<wallLeftScript>().wallJumpLeft == true) {

GetComponent<Rigidbody2D> ().AddForce (new Vector2(420, 150));

}

}




}
}



void UpdateScore() {

scoreText.text = "Score: " + (score );

}

(旁注:wallLeft/wallRight 用于跳墙)

最佳答案

这是你的问题!

您正在使用 Input.GetKeyDown(KeyCode.W) && touching == true在这种情况下,您的跳跃取决于 touching按下“W”键时可能为假的变量。您正在使用 rigidbody当它被水平拖动时,你不能指望它总是与地面碰撞。因此,您可能需要更改您的实现以进行地面检查。

This Tutorial有利于学习二维角色。

还有一个建议!尝试将对象/组件的引用存储在一些变量中以便于访问它们。使用 GetComponent<>/GameObject.Find()Update()/FixedUpdate()效率不高,所以不是一个好的做法。

关于c# - Unity 5.1.1 有时会跳过 "Input.GetKeyDown"行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31363497/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com