Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Проблема со скриптом C#

Абоба Абоба Ученик (93), на голосовании 8 месяцев назад
Написал скрипт, но при использовании его на обьекте выдаёт ошибку: Can't add script component 'Car Controller' because the script class cannot be found. Make sure that there are no compile errors and that the file name and class name match (Не удается добавить компонент скрипта "Автомобильный контроллер", поскольку класс скрипта не найден. Убедитесь, что нет ошибок компиляции и что имя файла и имя класса совпадают). Что может быть не так?
Имя файла такое же как и класс.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

private class CarController : MonoBehaviour
{
[SerializeField] private Transform _transformFL;
[SerializeField] private Transform _transformFR;
[SerializeField] private Transform _transformRL;
[SerializeField] private Transform _transformRR;

[SerializeField] private WheelCollider _colliderFL;
[SerializeField] private WheelCollider _colliderFR;
[SerializeField] private WheelCollider _colliderRL;
[SerializeField] private WheelCollider _colliderRR;
[SerializeField] private float _force;
[SerializeField] private float _maxAngle;


private void FixedUpdate()
{
_colliderFL.motorTorque = Input.GetAxis("vertical") * _force;
_colliderFL.motorTorque = Input.GetAxis("vertical") * _force;

If(Input.GetKey( KeyCode.Space ));
{
_colliderFL.brakeTorque = 3000f;
_colliderFL.brakeTorque = 3000f;
_colliderFL.brakeTorque = 3000f;
_colliderFL.brakeTorque = 3000f;
}
else
{
_colliderFL.brakeTorque = 0f;
_colliderFL.brakeTorque = 0f;
_colliderFL.brakeTorque = 0f;
_colliderFL.brakeTorque = 0f;
}

_colliderFL.steerAngle = _maxAngle * Input.GetAxis("Horizontal");
_colliderFL.steerAngle = _maxAngle * Input.GetAxis("Horizontal");
RotateWheel(_colliderFL, _transformFL);
RotateWheel(_colliderFL, _transformFR);
RotateWheel(_colliderFL, _transformRL);
RotateWheel(_colliderFL, _transformRR);

}

private void RotateWheel(WheelCollider collider, Transform transform)
{
Vector3 position;
Quaternion rotation;

collider.GetWorldPose(out position, out rotation);

transform.rotation = rotation;
transform.rotation = position;
}
}
Голосование за лучший ответ
Татьяна Просветленный (36384) 9 месяцев назад
Я нашла несколько ошибок в вашем скрипте, которые могут вызывать проблему с добавлением компонента скрипта. Вот исправленный вариант вашего кода:
 using System.Collections;  
using System.Collections.Generic;
using UnityEngine;

// Изменила модификатор доступа класса на public, чтобы он был виден в редакторе Unity
public class CarController : MonoBehaviour
{
[SerializeField] private Transform _transformFL;
[SerializeField] private Transform _transformFR;
[SerializeField] private Transform _transformRL;
[SerializeField] private Transform _transformRR;

[SerializeField] private WheelCollider _colliderFL;
[SerializeField] private WheelCollider _colliderFR;
[SerializeField] private WheelCollider _colliderRL;
[SerializeField] private WheelCollider _colliderRR;
[SerializeField] private float _force;
[SerializeField] private float _maxAngle;


private void FixedUpdate()
{
// Исправила опечатку в названии коллайдера
_colliderFL.motorTorque = Input.GetAxis("Vertical") * _force;
_colliderFR.motorTorque = Input.GetAxis("Vertical") * _force;

// Убрала лишнюю точку с запятой после условия
if(Input.GetKey( KeyCode.Space ))
{
// Применила тормозной крутящий момент ко всем коллайдерам
_colliderFL.brakeTorque = 3000f;
_colliderFR.brakeTorque = 3000f;
_colliderRL.brakeTorque = 3000f;
_colliderRR.brakeTorque = 3000f;
}
else
{
// Сбросила тормозной крутящий момент для всех коллайдеров
_colliderFL.brakeTorque = 0f;
_colliderFR.brakeTorque = 0f;
_colliderRL.brakeTorque = 0f;
_colliderRR.brakeTorque = 0f;
}

// Применила угол поворота к передним коллайдерам
_colliderFL.steerAngle = _maxAngle * Input.GetAxis("Horizontal");
_colliderFR.steerAngle = _maxAngle * Input.GetAxis("Horizontal");
// Вызвала метод RotateWheel для всех коллайдеров и трансформов
RotateWheel(_colliderFL, _transformFL);
RotateWheel(_colliderFR, _transformFR);
RotateWheel(_colliderRL, _transformRL);
RotateWheel(_colliderRR, _transformRR);

}

private void RotateWheel(WheelCollider collider, Transform transform)
{
Vector3 position;
Quaternion rotation;

collider.GetWorldPose(out position, out rotation);

transform.rotation = rotation;
// Исправила опечатку в названии свойства
transform.position = position;
}
}
Абоба АбобаУченик (93) 9 месяцев назад
не помогло
Похожие вопросы