Unity Prefab Имя `mainCamera 'не существует в текущем контексте - PullRequest
0 голосов
/ 21 ноября 2018

Я получаю ошибку Имя mainCamera' does not exist in the current context for the line targetPos = (Vector2) mainCamera.main.ScreenToWorldPoint (Input.mousePosition); `.Я ищу ответ, но не могу найти способ остановить это.

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

public class PlayerController : MonoBehaviour {

    float speed = 2f;
    Vector2 targetPos;

    private Rigidbody2D myRigidbody;
    private Animator myAnim;

    private static bool playerExists;
    public GameObject cameraPrefab;

    private void Start()
    {
        myRigidbody = GetComponent<Rigidbody2D>();
        myAnim = GetComponent<Animator>();

        if(!playerExists){
            playerExists = true;
            DontDestroyOnLoad(transform.gameObject);
        } else {
            Destroy(gameObject);
        }

        targetPos = transform.position;

        GameObject mainCamera = (GameObject)Instantiate(cameraPrefab);
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {

            targetPos = (Vector2)mainCamera.main.ScreenToWorldPoint(Input.mousePosition);
        }
        if ((Vector2)transform.position != targetPos)
        {
            Move();
        } else {
            myAnim.SetBool("PlayerMoving", false);
        }
    }

1 Ответ

0 голосов
/ 21 ноября 2018

Вы получаете эту конкретную ошибку, потому что mainCamera является локальной переменной, определенной в Start.Это выходит за рамки, где вы пытаетесь сослаться на это в Update.Вы, вероятно, хотели определить его как поле в вашем классе, чтобы вы могли ссылаться на него с mainCamera в любом месте вашего класса.Чтобы сделать это, вы должны сделать это вместо этого:

// ...

private Rigidbody2D myRigidbody;
private Animator myAnim;

private static bool playerExists;
public GameObject cameraPrefab; 
public GameObject mainCamera; // add this line

private void Start()
{
    myRigidbody = GetComponent<Rigidbody2D>();
    myAnim = GetComponent<Animator>();

    if(!playerExists){
        playerExists = true;
        DontDestroyOnLoad(transform.gameObject);
    } else {
        Destroy(gameObject);
    }

    targetPos = transform.position;

    mainCamera = (GameObject)Instantiate(cameraPrefab); // use mainCamera field
    mainCamera.tag = "MainCamera"; // tell Unity that it is your main camera.
}

// ...

Но в любом случае, Camera.main является статическим свойством класса Camera, поэтому вы должны обращаться к нему через класс Camera в любом случае.

Вы должны использовать это в Update вместо:

targetPos = (Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...