BadCats
@BadCats

Unity3d ошибка с переключением камер?

public Camera camera1;
    public Camera camera2;
    // Use this for initialization
    void Start () {
     
        camera1 = (Camera)(object)GameObject.FindGameObjectWithTag("MainCamera");
        camera2 = GetComponent<Camera>();
        camera1.enabled = true;
        camera2.enabled = false;

void Update () {
        if (Input.GetKey(KeyCode.W))
        {
           camera2.enabled = !camera2.enabled;
            camera1.enabled = !camera1.enabled;
            transform.Translate(Vector3.forward * Time.deltaTime * speed);
        };


При запуске unity выдает такую ошибку -
InvalidCastException: Cannot cast from source type to destination type.
CubeScript.Start () (at Assets/scripts/CubeScript.cs:12)

-Т.е оно ругается на строку
camera1 = (Camera)(object)GameObject.FindGameObjectWithTag("MainCamera");
- из - за привидения типов, но по-другому преобразовать из GameObject в Camera у меня не выходит - т.к мне из двух камер на сцене в это поле нужно присвоить одну конкртную, а это же как я понимаю единственный способ получит ссылку на внешний объект?
И далее при нажатии соответствующей клавиши W
возникает ошибка:
nassignedReferenceException: The variable camera2 of CubeScript has not been assigned.
You probably need to assign the camera2 variable of the CubeScript script in the inspector.
CubeScript.Update () (at Assets/scripts/CubeScript.cs:23)

-почему unity говорит что значение для переменной camera2 не назначено? Ведь вот здесь - camera2 = GetComponent<Camera>();
я присваивая ей значение - объект получает камеру которую я "повесил" на объект, а
camera1 = (Camera)(object)GameObject.FindGameObjectWithTag("MainCamera");
- студия получает "главную камеру" - т.е у меня в сцене - две камеры
  • Вопрос задан
  • 308 просмотров
Решения вопроса 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Вы неправильно понимаете суть классов и компонентов, внимательно почитайте документацию. GameObject это не компонент, с помощью каста в другой класс нельзя магическим образом достать из него компонент, для этого существует специальный метод GameObject.GetComponent. Кроме того, в вашем случае конструкцию с FindGameObjectWithTag можно заменить вызовом Camera.main, результат будет такой же. Это не очень хорошая практика в контексте камер, но это уж вам решать. Что касаемо второй ошибки, она случается из-за того, что в вашем старте в первой строчке вызывается исключение, что обрывает поток метода, и все последующие строчки не вызываются, поэтому camera2 остаётся null.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks Куратор тега C#
camera1 = Camera.main

По поводу второй камеры
Скорее всего, на объекте просо нет такого компонента. На всякий случае, добавте атрибут RequireComponentr(typeof(Camera)) перед классом скрипта. Затем удалить скрипт с объекта и повесьте опять.
Или же назначьте камеру в инспекторе ручную
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы