Помощь в коде С#
Помогите пожалуйста с кодом начинающему, пишет Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка 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:
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:
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
}
}
}