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");
студия получает "главную камеру" - т.е у меня в сцене - две камеры
Вся ваша проблема заключается в строке, где вы ищете объект MainCamera:
camera1 = (Camera)(object)GameObject.FindGameObjectWithTag("MainCamera");
Во-первых, GameObject.FindGameObjectWithTag
возвращает тип GameObject[]
, то есть массив, который у вас никогда не получится преобразовать к Camera
, об этом можно почитать в документации. Вы можете исправить это если полученный результат (массив) проверите на количество элементов, то есть в вашем случае там должен быть 1 элемент и обратитесь именно к нему, то есть примерно так:
var goArray = GameObject.FindGameObjectWithTag("MainCamera");
var cameraGO = goArray[0];
и потом получите саму камеру на этом объекте, не по средствам приведения типов, а через GetComponent<Camera>()
Во-вторых, можете использовать метод GameObject.FindWithTag, что будет намного проще в вашем случае, так как он вернет 1 активный GameObject с указанным тэгом. Но у него все-равно надо будет вызывать GetComponent<Camera>()
. Никакого преобразования типов не нужно.
Также если
camera2 = GetComponent<Camera>();
выдает ошибку, то это может быть только в случае, если на GameObject, к которому прикреплен ваш скрипт, нет компонента Camera.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте, хотелось бы узнать, как можно в Camarin, не Shared проекте изменить xaml стиль отдельно для Android, чтобы эти изменения не отображались...
Есть приложение написанное на c# в visual studioКаждый день я его запускаю в ручную в определенное время
Добрый день! Пришлось работать сswf файлами