Top.Mail.Ru
Ответы

Помощь в коде С#

Помогите пожалуйста с кодом начинающему, пишет Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка CS0117 "ScoreManager" не содержит определение для "Instance". Assembly-CSharp C:\Users\zakat\unity_project\Fly Games 2D\Assets\Scripts\Pipe_01.cs 16 Активные


Вот ScoreManager

using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
using static UnityEditor.Timeline.TimelinePlaybackControls;

public class ScoreManager : MonoBehaviour
{
public static int score;
public int hightscore;
public Text scoreNormalText;
public Text scoreHightText;


private void Update()
{
scoreNormalText.text = "score" + score;
scoreHightText.text = "hightscore" + PlayerPrefs.GetInt("HightScoreText");

if (PlayerPrefs.GetInt("HightScoreText") <+ hightscore)

{
PlayerPrefs.SetInt("HightScoreText", hightscore);
}
}



}


Вот Pipe_01

using UnityEngine;

public class Pipe_01 : MonoBehaviour
{
public float speed;

private void Update()
{
transform.Translate(Vector2.left * speed * Time.deltaTime); // спавн трубы по вектору
}

private void OnTriggerEnter2D(Collider2D other)
{
if (other.TryGetComponent<Player>(out Player player))
{
ScoreManager.Instance.SetScore(1); // - ТУТ ОШИБКА в Instance
}

}
}

По дате
По Рейтингу
Аватар пользователя
Просветленный

Ошибка указывает на то, что в вашем классе ScoreManager нет статического свойства Instance. Если вы хотите иметь доступ к экземпляру ScoreManager через статическое свойство, вы можете реализовать паттерн Singleton. Вот пример того, как это можно сделать:

Обновленный ScoreManager:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
 using TMPro;  
using Unity.VisualScripting;  
using UnityEngine;  
using UnityEngine.UI;  
 
public class ScoreManager : MonoBehaviour  
{  
    public static ScoreManager Instance { get; private set; } 
    public static int score;  
    public int hightscore;  
    public Text scoreNormalText;  
    public Text scoreHightText;  
 
    private void Awake() 
    { 
        if (Instance == null) 
        { 
            Instance = this; 
            DontDestroyOnLoad(gameObject); 
        } 
        else 
        { 
            Destroy(gameObject); 
        } 
    } 
 
    private void Update()  
    {  
        scoreNormalText.text = "score " + score;  
        scoreHightText.text = "hightscore " + PlayerPrefs.GetInt("HightScoreText");  
 
        if (PlayerPrefs.GetInt("HightScoreText") < hightscore)  
        {  
            PlayerPrefs.SetInt("HightScoreText", hightscore);  
        }  
    } 
 
    public void SetScore(int value) 
    { 
        score += value; 
        if (score > hightscore) 
        { 
            hightscore = score; 
            PlayerPrefs.SetInt("HightScoreText", hightscore); 
        } 
    } 
} 
 

Обновленный Pipe_01:

1234567891011121314151617181920
 using UnityEngine;  
 
public class Pipe_01 : MonoBehaviour  
{  
    public float speed;  
 
    private void Update()  
    {  
        transform.Translate(Vector2.left * speed * Time.deltaTime);  // спавн трубы по вектору  
    }  
 
    private void OnTriggerEnter2D(Collider2D other)  
    {  
        if (other.TryGetComponent<Player>(out Player player))  
        {  
            ScoreManager.Instance.SetScore(1);  // Доступ через Instance 
        }  
    }  
}