ariadna villavicencio gamarra Ответов: 1

Ошибка CS1061: 'PLAYERCONTROLLER'


<pre>using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoveLeft : MonoBehaviour
{
    public float speed = 20f;
    private float lowerBound = -25f;

    private PLAYERCONTROLLER playerControllerScript;

    // Start is called before the first frame update
    void Start()
    {
        playerControllerScript = GameObject.Find("Player").GetComponent<PLAYERCONTROLLER>();
    }

    // Update is called once per frame
    void Update()
    {
        if (playerControllerScript.gameOver == false)
        {
            transform.Translate(Vector3.left * Time.deltaTime * speed);
        }
    

        if (transform.position.y < lowerBound)
        {
            Destroy(gameObject);
        }

    }
}


Что я уже пробовал:

Помогите, пожалуйста.Есть ли в этом что-то неправильное?
error CS1061: 'PLAYERCONTROLLER' does not contain a definition for 'gameOver' and no accessible extension method 'gameOver' accepting a first argument of type 'PLAYERCONTROLLER' could be found (are you missing a using directive or an assembly reference?)

Garth J Lancaster

Почему "PlayerController" написан в верхнем регистре, как здесь

private PLAYERCONTROLLER playerControllerScript;
а здесь
playerControllerScript = GameObject.Find("Player").GetComponent<PLAYERCONTROLLER>();


На том маленьком кусочке кода, который вы положили, нет никакой причины - разве это не должен быть PlayerController ? (если только что-то не происходит в другом месте кода, который Вы нам не показали)

ariadna villavicencio gamarra

Это ссылка на другой скрипт, который называется "PLAYERCONTROLLER"

F-ES Sitecore

Это означает, что в PLAYERCONTROLLER нет поля под названием gameOver, все очень просто. Чтобы исправить это, вам нужно убедиться, что есть поле под названием gameOver. Возможно, такое поле действительно существует, но дело обстоит иначе, то есть его можно назвать GameOver. c# чувствителен к регистру, поэтому важно, чтобы регистр был точным. Если это не так, то убедитесь, что gameOver помечен как общедоступный, чтобы к нему можно было получить доступ с помощью кода в других классах.

1 Ответов

Рейтинг:
0

OriginalGriff

Сообщение об ошибке довольно явное: класс не содержит метода с таким именем.
Вы либо пытаетесь вызвать метод в неправильном классе (например, вызов Substring на int например, значение) или вы забыли добавить метод в свой класс.

И Гарт прав: название PLAYERCONTROLLER-плохая идея, хорошие практики C# означают, что классы должны быть CamelCase: PlayerController более очевиден там, где "слова ломаются" и легче читается при загрузке.
Это может быть проблемой с некоторыми классами, где имя становится двусмысленным, потому что оно может быть сломано в нескольких местах - подумайте об интернет-сайтах с "плохими значениями", потому что регистр не имеет значения в доменах:

EXPERTSEXCHANGE  ExpertSexChange or ExpertsExchange?
PENISLAND        PenisLand or PenIsland?
THERAPISTFINDER  TheRapistFinder or TherapistFinder?
Это очень хорошая идея, чтобы придерживаться установленных конвенций!