Еще один глупый вопрос о нисходящем движении с Unity, вызывающим ошибки - PullRequest
0 голосов
/ 17 марта 2020

Я - первый программист, наблюдающий учебник по созданию 2D-игры сверху вниз. Моя цель в этом конкретном разделе кода c - просто заставить игрока ходить и сталкиваться с блоками и другими персонажами. Учебное пособие, которому я следую, - «Изучите движок Unity и C#, создав настоящую RPG сверху вниз» на Udemy, и я не вижу, чтобы кто-то еще сталкивался с такой же проблемой.

Вот рабочий код, который был до Я добавил коллизии:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class player : MonoBehaviour
{
    private BoxCollider2D boxCollider;

    private Vector3 moveDelta;

    private void Start()
    {
        boxCollider = GetComponent<BoxCollider2D>();
    }

    private void FixedUpdate()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float y = Input.GetAxisRaw("Vertical");

        //Reset moveDelta
        moveDelta = new Vector3(x, y, 0);

        //Swap sprite direction for left or right
        if (moveDelta.x > 0)
            transform.localScale = Vector3.one;
        else if (moveDelta.x < 0)
            transform.localScale = new Vector3(-1, 1, 1);
    }
}

Теперь вот с коллизиями:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    private BoxCollider2D boxCollider;
    private Vector3 moveDelta;
    private RaycastHit2D hit;

    private void Start()
    {
        boxCollider = GetComponent<BoxCollider2D>();
    }

    private void FixedUpdate()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float y = Input.GetAxisRaw("Vertical");

        //Reset moveDelta
        moveDelta = new Vector3(x, y, 0);

        //Swap sprite direction for left or right
        if (moveDelta.x > 0)
            transform.localScale = Vector3.one;
        else if (moveDelta.x < 0)
            transform.localScale = new Vector3(-1, 1, 1);

        //Make sure we can move in this direction by casting a box there. If box returns null, free to move.
        hit = physics2D.BoxCast(transform.position, boxCollider.size, 0, new Vector2(0, moveDelta.y), Mathf.Avs(moveDelta.y * Time.deltaTime), Layermask.GetMask("Actor", "Blocking"));
        if (hit.collider == null)
        {
            //Make it move
            transform.Translate(0, moveDelta.y * Time.deltaTime, 0);
        }
        hit = physics2D.BoxCast(transform.position, boxCollider.size, 0, new Vector2(moveDelta.x,0), Mathf.Avs(moveDelta.x * Time.deltaTime), Layermask.GetMask("Actor", "Blocking"));
        if (hit.collider == null)
        {
            //Make it move
            transform.Translate(moveDelta.x * Time.deltaTime, 0, 0);
        }


    }
}

Мне дано 8 ошибок:

Активы \ player.cs (31, 15): ошибка CS0103: имя «phys2D» не существует в текущем контексте

Assets \ player.cs (31,109): ошибка CS0117: «Mathf» не содержит определения для «Avs»

Assets \ player.cs (31,144): ошибка CS0103: имя 'Layermask' не существует в текущем контексте

Assets \ player.cs (37,15): ошибка CS0103: Имя 'физика2D' не существует в текущем контексте

Assets \ player.cs (37,108): ошибка CS0117: «Mathf» не содержит определения для «Avs»

Активы \ игрок. cs (37,143): ошибка CS0103: имя 'Layermask' не существует в текущем контексте

Невозможно проанализировать файл Library / L astSceneManagerSetup.txt: [Управляющие символы недопустимы] в строке 0

Недопустимое содержимое файла для Library / StateCache / SceneView / 496fa5-mainStage. json. Удаление файла. Ошибка: System.ArgumentException: JSON Ошибка разбора: документ пуст. в (управляемый оболочкой) UnityEngine.JsonUtility.FromJsonInternal (строка, объект, System.Type) в UnityEngine.JsonUtility.From Json (System.String json, тип System.Type) [0x00062] в C: \ buildslave \ unity \ build \ Modules \ JSONSerialize \ Public \ JsonUtility.bindings.cs: 50 в UnityEngine.JsonUtility.FromJson [T] (System.String json) [0x0000c] в C: \ buildslave \ unity \ build \ Modules \ JSONSerialize \ Public \ JsonUtility.bindings.cs: 33 в UnityEditor.StateCache`1 [T] .GetState (ключ System.String) [0x00087] в C: \ buildslave \ unity \ build \ Editor \ Mono \ Utils \ StateCache.cs: 90 UnityEditor.SceneView: OnEnable () UnityEditorInternal.InternalEditorUtility: LoadSerializedFileAndForget (String) UnityEditor.WindowLayout: LoadWindowLayout (строка, логическое значение / сборка / сборка / сборка / сборка / сборка / сборка / сборка / сборка / сборка / сборка / сборка / сборка / версия): C /Mono/GUI/WindowLayout.cs:495)

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

Понятия не имею, что я Я делаю, но любая помощь приветствуется.

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