Я только начинаю заниматься разработкой игр на Unity и пытался сделать некоторые движения, но Unity выдает мне ошибку, связанную с MonoBehaviour. Может кто-то помочь? Сообщение такое:
Не найдены скрипты MonoBehaviour в файле или их имена не совпадают с именем файла.
Код находится в Visual Studio 2019.
Вот мой код, конкретно для игрового движка игрока:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMotor : MonoBehaviour
{
private CharacterController controller;
private Vector3 playerVelocity;
public float speed = 5f;
// Start вызывается перед первым обновлением кадра
void Start()
{
controller = GetComponent<CharacterController>();
}
// Update вызывается один раз за кадр
void Update()
{
}
//получаем ввод для нашего InputManager.cs и применяем его к контроллеру персонажа.
public void processMove(Vector2 input)
{
Vector3 moveDirection = Vector3.zero;
moveDirection.x = input.x;
moveDirection.z = input.y;
controller.Move(transform.TransFormDirection(moveDirection) * speed * Time.deltaTime);
}
}
Я пытался добавить скрипт к игровому персонажу, но вместо этого получил эту ошибку в Unity вместе с сообщением: “Пожалуйста, исправьте ошибки компиляции перед созданием новых компонентов скрипта.”
Судя по тому, что я вижу в вашем предоставленном скрипте:
У вас есть опечатка в TransFormDirection(), должно быть TransformDirection().
Также, пожалуйста, предоставьте все сообщения об ошибках, которые у вас есть.
Ответ
Конечно! Давайте разберем вашу проблему с кодом, используя предоставленный вами пример кода для PlayerMotor.
Причина Ошибки
Ошибка, которую вы получаете: "No MonoBehaviour scripts in the file, or their names do not match the file name" может возникнуть по нескольким причинам:
-
Имя файла не соответствует имени класса: Имя файла должно точно совпадать с именем класса. В вашем случае, файл должен называться
PlayerMotor.cs
. - Ошибки в коде: Наличие ошибок в вашем коде также приведет к тому, что Unity не сможет скомпилировать скрипт. В вашем коде есть опечатка в методе
TransformDirection()
, который вы написали какTransFormDirection()
. Это ошибка, и её нужно исправить.
Исправление
Попробуйте внести следующие изменения в ваш код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMotor : MonoBehaviour
{
private CharacterController controller;
private Vector3 playerVelocity;
public float speed = 5f;
// Start is called before the first frame update
void Start()
{
controller = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
}
// Получение вводимых данных для управления и применение их к контроллеру персонажа.
public void processMove(Vector2 input)
{
Vector3 moveDirection = Vector3.zero;
moveDirection.x = input.x;
moveDirection.z = input.y;
controller.Move(transform.TransformDirection(moveDirection) * speed * Time.deltaTime); // Исправлено здесь
}
}
Шаги для Решеения Проблемы
- Убедитесь, что имя файла
PlayerMotor.cs
совпадает с именем вашего классаPlayerMotor
. - Исправьте опечатку в методе
TransformDirection()
. - После внесения изменений сохраните файл в Visual Studio и вернитесь в Unity. Unity должна автоматически скомпилировать код при внесении изменений. Если есть другие ошибки, они будут отображены в консоли Unity.
Дополнительные Советы
- Если после исправления вы всё равно получаете ошибки, проверьте другие скрипты в вашем проекте на наличие компиляционных ошибок, так как они могут также блокировать сборку.
- Ознакомьтесь с консолью Unity для получения подробной информации об ошибках, так как она может дать подсказки о том, что именно не так.
Если вы хотите поделиться дополнительными ошибками, которые вы видите в консоли Unity, не стесняйтесь и пишите, я с радостью помогу вам с их решением!