Вы получаете эту конкретную ошибку, потому что 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);