为什么我的游戏不会实例化?

时间:2017-02-15 14:27:50

标签: unity3d

我不知道为什么Insantiation不起作用。我正试着用空格键来做。或者它可能是关于轴的东西?

public GameObject projectile;
public Transform padre, hijo;
public Rigidbody r;
private float value;

void Start () {
    padre = transform.parent;
    hijo = transform.GetChild (0);
    value = 0;
}

void Update () {

    float j = Input.GetAxis ("Jump");
    if (j == 1 && value == 0) {
        Instantiate (projectile, hijo.position, hijo.transform.rotation);
    }

    float h = Input.GetAxis ("Horizontal2");
    r.transform.Translate (h * Time.deltaTime, 0, 0);

    float v = Input.GetAxis ("Vertical2");
    padre.Rotate (0, 0, -v * Time.deltaTime * 20);

    value = j;
}

2 个答案:

答案 0 :(得分:2)

比较浮动永远不是一个好主意。

在此语句变为true之前,j变量必须等于1value变量必须为0Input.GetAxis会返回01之间的值。

如果你想要做的就是在按下Space键时实例化GameObject,他们只需使用Input.GetKeyDown代替Input.GetAxis

if (Input.GetKeyDown(KeyCode.Space))
{
    Instantiate(projectile, hijo.position, hijo.transform.rotation);
}

答案 1 :(得分:0)

你正在检查j是否完全等于1.但是,getAxis返回一个接近但不完全等于1的浮点数。而是检查j何时接近1。

例如(伪代码):

float j = Input.GetAxis ("Jump");
float ep=.1f;
if (Math.abs(j-1)<ep && value == 0) {
   //Instantiate

此外,您应确保value实际上等于0(您可能还有一些其他代码修改它,除了显示的内容)