C#Unity-当我在游戏中单击空格键时,如何启用“ PlayerMovement”脚本和“使用重力”复选框(刚体)?

时间:2018-07-12 13:17:51

标签: c# unity3d input user-input

一周前,我开始制作我的第一款游戏,但是在编码方面遇到了一些问题。基本上,我制作了一款您可以玩球的游戏。目标是躲避障碍并达到关卡的尽头。

我制作了一个重生器,每当您死亡时,它都会将球放在地图的开始处。我的问题是,一旦球重新产生,球就会再次开始移动。

到目前为止,为了防止Ball从一开始就移动,我所做的就是禁用了Ball的PlayerMov脚本(玩家移动)以及Rigidbody组件中的“使用重力”复选框。所以现在我的球卡在了无法移动的起始位置。

那么我需要什么帮助?我希望人类玩家按下空格键以使球的PlayerMov脚本和“使用重力”复选框(在Rigidbody中)启用。因此,它不再需要在重生后立即移动球,而是现在要等待人类玩家按下空格键再开始。

您可以在下面看到的脚本是我的EnableMovement脚本,我在其中尝试解决此问题。但是出了点问题,我不太确定这是什么。

Code error

2 个答案:

答案 0 :(得分:2)

您必须将其放置在update()方法中,因此,如果按下空格键,脚本将检查每个帧。

void Update()
{
    if (Input.GetKey(KeyCode.Space)) //notice the removing of the ;
    {
        GetComponent<PlayerMov>().enabled = true;
    }
}

键入此代码时,您的代码有误:

if (Input.GetKey(KeyCode.Space)); //notice the ;
{
    GetComponent<PlayerMov>().enabled = true;
}

这与:

是同一回事
if (Input.GetKey(KeyCode.Space))
    ; //Do nothing
//there is a scope that will be executed
{
    GetComponent<PlayerMov>().enabled = true;
}

和这完全一样:

if (Input.GetKey(KeyCode.Space))
{
    ; //Do nothing
}
//there is a scope that will be executed
{
    GetComponent<PlayerMov>().enabled = true;
}

答案 1 :(得分:2)

编辑:我的错误,您要更改的属性不是enabled的{​​{1}}。是IsKinematic。另外,您可能也想禁用碰撞。我已经在下面编辑了代码。

一个简单的解决方案是在运行游戏时禁用物理功能,并在玩家按下空格时启用物理功能。将Rigidbody属性设置为Rigidbody.IsKinematic意味着true将不受物理影响。这样,您无需触摸重力设置或禁用脚本。

GameObject