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

Это почему то не работает? Unity 2D C#

BarKode Ученик (33), на голосовании 1 неделю назад
Взял код из ролика maxter. Вот только код сам не работает выдаёт ошибку уже в юнити:

NullReferenceException: Object reference not set to an instance of an object
FIreGUn.Update () (at Assets/Scripts/FIreGUn.cs:18) .

Хотя раньше вроде у меня работала, но сейчас нет. В общем сам код должен делать это: чтоб предмет то есть оружие вращался за курсором. Помоги с кодом ну или с Юнити.
Вот код:

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

public class FIreGUn : MonoBehaviour
{

public float offset;

void Start()
{

}


void Update()
{
Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rotZ + offset);

}
}
Голосование за лучший ответ
** Эгоист ** Знаток (483) 1 месяц назад
Ошибка NullReferenceException: Object reference not set to an instance of an object обычно возникает, когда код пытается получить доступ к объекту, который не инициализирован. В вашем случае это, вероятно, связано с тем, что Camera.main возвращает null.
Вот несколько шагов, чтобы исправить проблему:
Проверьте наличие камеры: Убедитесь, что в вашей сцене есть камера, и она помечена как "Main Camera". Для этого выберите камеру в иерархии и убедитесь, что в её инспекторе установлен тег "MainCamera".
Проверьте, есть ли ошибки в консоли: Убедитесь, что в консоли Unity нет других ошибок, которые могут мешать работе вашего кода.
Используйте проверку на null: Вы можете добавить проверку на null для Camera.main, чтобы избежать сбоев, если камера не найдена:

void Update()
{
if (Camera.main == null)
{
Debug.LogError("Main camera not found!");
return;
}

Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rotZ + offset);
}


Проверка компонента: Убедитесь, что ваш скрипт FIreGUn прикреплен к объекту, который должен вращаться (например, к объекту оружия). Если он прикреплен к пустому объекту или объекту без нужного компонента, это может вызвать проблему.
Тестирование: Попробуйте временно изменить код, чтобы использовать фиксированное значение для difference, чтобы увидеть, работает ли вращение без получения координат мыши.
Если после всех этих шагов проблема всё ещё остается, попробуйте перезапустить Unity или создать новый проект и протестировать код там.
Похожие вопросы