Lololishka
@Lololishka
IT наше все

Camera не содержит определения для «main»?

Пишу 2D платформер, дошел до того, что нужно сделать оружие. Пишу скрипт, написал все как нужно, однако unity выдает, что Camera не содержит определения для "main"(camera does not contain a definition for "main").
Что делать? Помогите.
Вот скрипт:
using UnityEngine;
using System.Collections;

public class FireScript2D : MonoBehaviour
{

    public float speed = 10; // скорость пули
    public Rigidbody2D bullet; // префаб нашей пули
    public Transform gunPoint; // точка рождения
    public float fireRate = 1; // скорострельность
    public bool facingRight = true; // направление на старте сцены, вправо?

    public Transform zRotate; // объект для вращения по оси Z

    // ограничение вращения
    public float minAngle = -40;
    public float maxAngle = 40;

    private float curTimeout, angle;
    private int invert;
    private Vector3 mouse;

    void Start()
    {
        if (!facingRight) invert = -1; else invert = 1;
    }

    void SetRotation()
    {
        Vector3 mousePosMain = Input.mousePosition;
        mousePosMain.z = Camera.main.transform.position.z;
        mouse = Camera.main.ScreenToWorldPoint(mousePosMain);
        Vector3 lookPos = mouse - transform.position;
        angle = Mathf.Atan2(lookPos.y, lookPos.x * invert) * Mathf.Rad2Deg;
        angle = Mathf.Clamp(angle, minAngle, maxAngle);
        zRotate.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
    }

    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            Fire();
        }
        else
        {
            curTimeout = 1000;
        }

        if (zRotate) SetRotation();

        if (angle == maxAngle && mouse.x < zRotate.position.x && facingRight) Flip();
        else if (angle == maxAngle && mouse.x > zRotate.position.x && !facingRight) Flip();
    }

    void Flip() // отражение по горизонтали
    {
        facingRight = !facingRight;
        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        invert *= -1;
        transform.localScale = theScale;
    }

    void Fire()
    {
        curTimeout += Time.deltaTime;
        if (curTimeout > fireRate)
        {
            curTimeout = 0;
            Vector3 direction = gunPoint.position - transform.position;
            Rigidbody2D clone = Instantiate(bullet, gunPoint.position, Quaternion.identity) as Rigidbody2D;
            clone.velocity = transform.TransformDirection(direction.normalized * speed);
            clone.transform.right = direction.normalized;
        }
    }
}

Заранее спасибо.
  • Вопрос задан
  • 3872 просмотра
Решения вопроса 2
@GreatRash
Camera.main - это шорткат для получения камеры с тегом "MainCamera". Т.е. вот эти две строки аналогичны:

// эта строка
GameObject.Find("MainCamera").GetComponent<Camera>();

// и эта строка
Camera.main;

// одно и то же


Вероятно вы удалили камеру, которую Unity добавляет в сцену автоматически. Или переименовали тег.
Ответ написан
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
У вас где-то в проекте лежит скрипт с названием Camera, из-за пересечения имён и получается такая ошибка. Почитайте внимательно консоль, у вас должно быть такое сообщение:
Script 'Camera' has the same name as built-in Unity component.
AddComponent and GetComponent will not work with this script.
UnityEditor.DockArea:OnGUI()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
TheTalion
@TheTalion
Нет камеры с тегом mainCamera или как-то так
Ответ написан
@MaximPolakov
Добрый день на данную проблему есть решение если скрипт носит название Camera то переминуйте его в любое другое название мне помогло(только не забудте указать в скрипте public class новое название : MonoBehaviour) всем удачи)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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