键输入在Unity中不起作用

时间:2014-10-11 19:24:10

标签: c# unity3d

我一直在关注pong教程,但我遇到了问题。

按箭头时球拍不动。

using UnityEngine;
using System.Collections;

public class MoveRacket : MonoBehaviour
{
    // up and down keys (to be set in the Inspector)
    public KeyCode up;
    public KeyCode down;

    void FixedUpdate()
    {
        // up key pressed?
        if (Input.GetKey(up))
        {
            transform.Translate(new Vector2(0.0f, 0.1f));
        }

        // down key pressed?
        if (Input.GetKey(down))
        {
            transform.Translate(new Vector2(0.0f, -0.1f));
        }
    }
}

我在检查员中为图像指定了一个键。

2 个答案:

答案 0 :(得分:0)

好的,你需要检查的是你的项目设置中是否定义了KeyCode。

最好使用以下代码来检测此类按键:

void Update () {
    if (Input.GetButton("Fire1") && Time.time > nextFire) {
        nextFire = Time.time + fireRate;
        Instantiate(projectile, transform.position, transform.rotation);
    }
}

来源:http://docs.unity3d.com/ScriptReference/Input.GetButton.html 另外,我建议您观看以下教程:https://www.youtube.com/watch?v=JgY5YxNHxtw 它非常清楚地解释了这一切。

希望它对你有帮助;)

编辑:将函数更改为void,因为您似乎正在使用C#

答案 1 :(得分:0)

我想我能帮到你。您无需在检查器中分配密钥代码。您可以直接从脚本访问它们。它应该简化你的脚本。

而不是:

using UnityEngine;
using System.Collections;

public class MoveRacket : MonoBehaviour
{
    // up and down keys (to be set in the Inspector)
    public KeyCode up;
    public KeyCode down;

    void FixedUpdate()
    {
        // up key pressed?
        if (Input.GetKey(up))
        {
            transform.Translate(new Vector2(0.0f, 0.1f));
        }

        // down key pressed?
        if (Input.GetKey(down))
        {
            transform.Translate(new Vector2(0.0f, -0.1f));
        }
    }
}

试试这个:

using UnityEngine;
using System.Collections;

public class MoveRacket : MonoBehaviour
{
        public float speed = 30f;
         //the speed at which you move at. Value can be changed if you want 

    void Update()
    {
        // up key pressed?
        if (Input.GetKeyDown(KeyCode.W)
        {
            transform.Translate(Vector2.up * speed * time.deltaTime, Space.world);
        }

        // down key pressed?
        if (Input.GetKeyDown(KeyCode.S))
        {
            transform.Translate(Vector2.down * speed * time.deltaTime, Space.World);
        }
    }
}

假设您想使用wasd键进行移动。如果需要,可以使用OR修饰符(||)添加其他的。此外,对于第二个玩家,请务必更改密钥代码,否则两个拨片将同时移动。

代码说明: 速度变量是你想要移动的速度。根据您的需要进行更改。

在transfor.Translate()中,您希望在世界坐标(非本地)中以恒定速度随时间向上移动。这就是你使用Vector2.up * speed * time.deltaTime的原因。 Vector2.up与

相同
new Vector2 (0f, 1f);

您将它乘以速度以获得移动的距离,然后通过Time.deltaTime来获得在此帧中移动的距离。由于每帧都会调用Update,因此每帧都会移动距离。

向下移动时,Vector2.down与

相同
new Vector2(0f, -1f);

希望这有帮助!