我正在使用Unity3D引擎开发第一款游戏,但遇到了第一个问题!不像我想的那样令人兴奋。如果我发送了跳跃按钮垃圾邮件,则w我的球会第一次跳跃,那么当它着陆时,它不会立即跳跃,但是在多次按下按钮后它会随机跳跃。我正在使用的代码如下。
#pragma strict
var rotationSpeed = 100;
var jumpHeight = 8;
private var isFalling = false;
function Update ()
{
//Handle ball rotation.
var rotation : float = Input.GetAxis ("Horizontal") * rotationSpeed;
rotation *= Time.deltaTime;
rigidbody.AddRelativeTorque (Vector3.back * rotation);
if (Input.GetKeyDown(KeyCode.W) && isFalling == false)
{
rigidbody.velocity.y = jumpHeight;
}
isFalling = true;
}
function OnCollisionStay ()
{
isFalling = false;
}
我听说这是UnityScript中的算术行为问题。我是编程的初学者,不太了解UnityScript中的代码,这是我在Unity3D中编写的第一个游戏/项目。帮助将不胜感激。谢谢!
您会认为,像跳动这样简单的事情应该很容易,但是这里有一些陷阱:
我认为最后一点是这里最大的问题。要解决此问题,您需要做几件事:
下面的代码实现了这些要点。如果您希望时间更紧一点,则必须在飞行中排队下一个跳跃。
#pragma strict
var rotationSpeed = 100;
var jumpHeight = 8;
private var isFalling = false;
private var tryingToJump = false;
function Update ()
{
//Handle ball rotation.
var rotation : float = Input.GetAxis ("Horizontal") * rotationSpeed;
rotation *= Time.deltaTime;
rigidbody.AddRelativeTorque (Vector3.back * rotation);
if (Input.GetKeyDown(KeyCode.W) && !isFalling) tryingToJump = true;
if (tryingToJump)
{
if (isFalling) tryingToJump = false;
else rigidbody.velocity.y = jumpHeight;
}
}
function FixedUpdate()
{
isFalling = true;
}
function OnCollisionStay()
{
isFalling = false;
}
function OnCollisionEnter()
{
isFalling = false;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句