我正在使用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中创建的第一个游戏/项目。非常感谢帮助。谢谢!
答案 0 :(得分:0)
你会认为像跳跃一样简单的东西应该是不费脑子的,但这里有一些问题:
我认为最后一点是这里最大的问题。要解决这个问题,你需要做几件事:
以下代码实现了这些要点。如果你想让时间更紧,你必须在空中时排队下一跳。
#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;
}