2015-10-13 7 views
-2

я получаю сообщение об ошибке в Unity 5ошибка CS1525: Неожиданный символ `insert variable name ', ожидающий`.'

ошибки CS1525: Неожиданный символ insert variable name', expecting.

using UnityEngine; 
using System.Collections; 

public class jumpControll : MonoBehaviour 
{ 

    public bool jump; 
    public float jumpHeight; 



    // Use this for initialization 

    public IEnumerator jumpUp (float jumpHeight) 
    { 
     jumpHeight = 3.0f; 
     transform.position = new Vector3(transform.position.x, 
      transform.position.y + jumpHeight, transform.position.z); 
    } 

    public IEnumerator jumpDown (float jumpHeight) 
    { 
     jumpHeight = 3.0f; 
     transform.position = new Vector3(transform.position.x, 
      transform.position.y - jumpHeight, transform.position.z); 
    } 

    public IEnumerator jumpTest() 
    { 
     jumpUp(float jumpHeight); 
     yield return new WaitForSeconds(1); 
     jumpDown(float jumpHeight); 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     jump = Input.GetKey(KeyCode.Space); 
     if (jump == true) 
      jumpTest(); 
    } 
} 
+1

Где происходит ошибка? Какой номер строки/символа? Это происходит во время сборки или времени выполнения? – Necoras

ответ

-1
public IEnumerator jumpUp(float jumpHeight) 
    { 
     transform.position = new Vector3(transform.position.x, transform.position.y + jumpHeight, transform.position.z); 
    } 

    public IEnumerator jumpDown(float jumpHeight) 
    { 
     transform.position = new Vector3(transform.position.x, transform.position.y - jumpHeight, transform.position.z); 
    } 

    public IEnumerator jumpTest() 
    { 
     jumpUp(3.0f); 
     yield return new WaitForSeconds(1); 
     jumpDown(3.0f); 
    } 
0

Есть несколько вещей, которые не собираются, чтобы ваш код для компиляции.

Прежде всего, вы указываете, что ваши методы jumpUp и jumpDown собираются вернуть IEnumerator, однако вы его не вернете. Если вам не нужно ждать промежутка времени в jumpUp и jumpDown, то они должны иметь тип возврата void, а не IEnumerator.

public void jumpUp (float jumpHeight) 
{ 
    jumpHeight = 3.0f; 
    transform.position = new Vector3(transform.position.x,    
            transform.position.y + jumpHeight, 
            transform.position.z); 
} 

public void jumpDown (float jumpHeight) 
{ 
    jumpHeight = 3.0f; 
    transform.position = new Vector3(transform.position.x, 
            transform.position.y - jumpHeight, 
            transform.position.z); 
} 

Во-вторых, в методе jumpTest, вы пытаетесь вызвать jumpUp и jumpDown переходящими в вашей jumpHeight переменного. Вам не нужно использовать ключевое слово float перед передаваемой вами переменной, потому что вы не создаете новую переменную, вместо этого вы используете ту, которая уже существует.

public IEnumerator jumpTest() 
{ 
    jumpUp(jumpHeight); 
    yield return new WaitForSeconds(1); 
    jumpDown(jumpHeight); 
} 

Наконец, для того, чтобы IEnumerator метод работать должным образом, вам нужно вызвать его с помощью StartCoroutine(). Например, в вашем методе обновления:

void Update() 
{ 
    jump = Input.GetKey(KeyCode.Space); 
    if (jump == true) 
     StartCoroutine(jumpTest()); 
}