我一直在关注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));
}
}
}
我在检查员中为图像指定了一个键。
答案 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);
希望这有帮助!