Я получаю сообщение об ошибке при использовании C # в 2D-игре Unity, говоря, что 5 моих имен «не существует в текущем контексте» - PullRequest
0 голосов
/ 19 июня 2019

Я получаю сообщение об ошибке при использовании C # в 2D-игре Unity, в котором говорится, что 5 моих имен "не существует в текущем контексте".

Я пытался изменить код и найти способы в Интернете, но ничего не работает.

Мой код:

using UnityEngine;

public class MovementManager : MonoBehaviour
{
public enum type { platformer, topDown };
    public type moveType;
    public float moveSpeed, jumpHeight;
    public bool onGround = false;
    private type platformer;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetAxisRaw("Horizontal") > 0)
        {
            transform.Translate(Vector2.right * Time.deltaTime * moveSpeed);
        }
        else if (Input.GetAxisRaw("Horizontal") < 0)
        {
            transform.Translate(Vector2.left * Time.deltaTime * moveSpeed);
        }

        if (moveType == type.platformer && Input.GetAxisRaw("Vertical") > 0 && onGround)
        {
            GetComponent<Rigidbody2D>().AddForce(Vector2.up * jumpHeight, ForceMode2D.Impulse);
        }

        if (moveType == type.topDown && Input.GetAxisRaw("Vertical") > 0)
        {
            transform.Translate(Vector2.up * Time.deltaTime * moveSpeed);
        }
        if (moveType == type.topDown && Input.GetAxisRaw("Vertical") < 0)
        {
            transform.Translate(Vector2.down * Time.deltaTime * moveSpeed);
        }
    }

    private void OnCollisionEnter2D (Collision2D obj)
    {
        if (obj.gameObject.tag == "ground")
        {
            onGround = true;
        }
    }
    private void OnCollisionExit2D(Collision2D obj)
    {
        if (obj.gameObject.tag == "ground")
        {
            onGround = false;
        }
    }
}

Я получаю 5 ошибок. 4 из них выглядят одинаково, но это не так. (Проверьте цифры в скобках.) Это:

"Assets / Scripts / MovementManager.cs (24,13): ошибка CS0103: имя` transform 'не существует в текущем контексте "

"Assets / Scripts / MovementManager.cs (28,13): ошибка CS0103: имя` transform 'не существует в текущем контексте "

"Assets / Scripts / MovementManager.cs (33,13): ошибка CS0103: имя` GetComponent 'не существует в текущем контексте "

"Assets / Scripts / MovementManager.cs (38,13): ошибка CS0103: имя` transform 'не существует в текущем контексте "

"Assets / Scripts / MovementManager.cs (42,13): ошибка CS0103: имя` transform 'не существует в текущем контексте "

1 Ответ

1 голос
/ 20 июня 2019

Прежде всего, я рекомендую поместить любое определение enum в отдельный файл.

Ваша ошибка связана с тем, что вы определяете enum внутри своего класса и ставите semicolon после определения. Удаление точки с запятой, вероятно, устранит вашу ошибку. Однако, как я уже сказал, я рекомендую поместить все перечисление в отдельный файл. Если вы этого не хотите, я бы рекомендовал перечислить enum вне определения вашего класса. Таким образом, он все еще может использоваться в других скриптах.

* 1006 например *

public enum MoveType
{
    platformer, 
    topdown
}

Также старайтесь избегать именования любого класса или перечисления 'type', поскольку Type является существующим классом и легко приводит к путанице и / или ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...