Я - первый программист, наблюдающий учебник по созданию 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)
Из того, что я смог найти, имя объявлено в неправильном блоке кода?
Понятия не имею, что я Я делаю, но любая помощь приветствуется.