Задать вопрос
@wirtun

Ошибка в создании 2д плтаформера на юнити. Как исправить?

5a5d84f95e83b931983421.png
Возникли две ошибки в создании скрипта для управления персонажем в юнити. Весь код можно прочитать здесь:

using UnityEngine;
using System.Collections;

public class characterController : MonoBehaviour {
    public float maxSpeed = 10f;
    public float jumpForce = 700f;
    bool facingRight = true;
    bool grounded = false;
    public Transform groundCheck;
    public float groundRadius = 0.2f;
    public LayerMask whatIsGround;

    public float move;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void FixedUpdate () {

        grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround);

        move = Input.GetAxis ("Horizontal");

    }

    void Update(){
        if (grounded && (Input.GetKeyDown (KeyCode.W)||Input.GetKeyDown (KeyCode.UpArrow))) {

            rigidbody2D.AddForce (new Vector2(0f,jumpForce));
        }
        rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);

        if (move > 0 && !facingRight)
            Flip ();
        else if (move < 0 && facingRight)
            Flip ();


        if (Input.GetKey(KeyCode.Escape))
        {
            Application.Quit();
        }

        if (Input.GetKey(KeyCode.R))
        {
            Application.LoadLevel(Application.loadedLevel);
        }

    }

    void Flip(){
        facingRight = !facingRight;
        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        transform.localScale = theScale;
    }              
}
  • Вопрос задан
  • 1996 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 3
GavriKos
@GavriKos Куратор тега Разработка игр
Да откуда ж вы лезете то... Почему сразу в геймдев? Изучите сначала язык!
Как исправить: внимательно почитать ошибку, еще внимательнее посмотреть на типы данных. Ну серьезно. Это начальный уровень, и если у вас ошибки на таком этапе - то дальше будет все только хуже.
Ответ написан
@GreatRash
public class characterController : MonoBehaviour {
  // ...
  public Rigidbody2D rb;

  void Start () {
    rb = GetComponent<Rigidbody2D>();
  }

  void FixedUpdate() {
    rb.AddForce(/* ... */);
    rb.velocity = new Vector2(/* ... */);
  }
}
Ответ написан
Комментировать
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Вам глупый MonoDevelop совершенно не то подсвечивает, поставьте лучше Visual Studio. У вас ошибка в том, что вы используете старую переменную MonoBehaviour.rigidbody2D, которая уже пару лет как не поддерживается, вам нужно самостоятельно создать ссылку на компонент, тогда всё заработает:
private Rigidbody2D rigidbody2D;

private void Awake()
{
    rigidbody2D = GetComponent<Rigidbody2D>();
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы