Четверг, 22 Февраля 2018, 23:51

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Страница 1 из 11
Модератор форума: beril 
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Error CS0120
Error CS0120
JoshOOOWAHДата: Суббота, 20 Января 2018, 16:21 | Сообщение # 1
уже был
Сейчас нет на сайте
Не получаеться
Цитата
Assets/Scripts HARD/EnemyHRD.cs(16,13): error CS0120: An object reference is required to access non-static member `ScoreHRD.scoreH'
Assets/Scripts HARD/EnemyHRD.cs(25,23): error CS0120: An object reference is required to access non-static member `ScoreHRD.scoreH'
Assets/Scripts HARD/EnemyHRD.cs(27,59): error CS0120: An object reference is required to access non-static member `ScoreHRD.scoreH'


Код:

Код
using UnityEngine;
using System.Collections;

public class EnemyHRD: MonoBehaviour
{
    private ScoreHRD scoreH;    // Reference to the Score script.
    
    private HighScoreHRD highscoreH;
    
    public GameObject NewHighScoreH;
   
    public void OnTriggerEnter (Collider other)
     {
  if (other.gameObject.tag == "Gem")
      {
   ScoreHRD.scoreH += 10;

   Destroy (other.gameObject);

   }
  }
  
    public void Update()
    {
         if (ScoreHRD.scoreH > PlayerPrefs.GetInt ("highscoreHRD"))
   {
             PlayerPrefs.SetInt ("highscoreHRD", ScoreHRD.scoreH);
    NewHighScoreH.SetActive (true);
         }
  }
}


Ну а еще из ScoreHRD
Код
using UnityEngine;
using System.Collections;

public class ScoreHRD : MonoBehaviour
{
    public int scoreH = 0;     // The player's score.\
  
    private int previousScoreH = 0;   // The score in the previous frame.

    void Update ()
    {
  // Set the score text.
  GetComponent<GUIText>().text = "Score: " + scoreH;

  // If the score has changed...
  if(previousScoreH!= scoreH)
  // Set the previous score to this frame's score.
  previousScoreH = scoreH;
    }

}


Что не так? %)
seamanДата: Суббота, 20 Января 2018, 16:30 | Сообщение # 2
старожил
Сейчас нет на сайте
Объясните - зачем Вы пишете так: ScoreHRD.scoreH += 10;
Т.е. зачем Вы тут пишете имя класса?


Сообщение отредактировал seaman - Суббота, 20 Января 2018, 16:32
karuyДата: Воскресенье, 21 Января 2018, 09:34 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Код
public static int scoreH = 0;
vampir0305Дата: Воскресенье, 21 Января 2018, 09:57 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
Чтобы получить доступ из одного скрипта к другому нужно писать:
Код
GetComponent<ScoreHRD>().scoreH += 10;


Сообщение отредактировал vampir0305 - Воскресенье, 21 Января 2018, 09:57
JoshOOOWAHДата: Воскресенье, 28 Января 2018, 17:11 | Сообщение # 5
уже был
Сейчас нет на сайте
Цитата vampir0305 ()
Чтобы получить доступ из одного скрипта к другому нужно писать:
Код
GetComponent<ScoreHRD>().scoreH += 10;


А что не работает..
Код
NullReferenceException: Object reference not set to an instance of an object
HardEnemy.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Scripts HARD/HardEnemy.cs:17)


Код:
pastebin
drcrackДата: Воскресенье, 28 Января 2018, 18:18 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Видимо потому что скрипт ScoreHRD висит на другом GameObject
Соответственно тебе нужна ссылка на него в каком-то виде, например в инспекторе через сериализуемое поле
Либо ScoreHRD сделать синглтоном, либо что-то еще придумать

Почему бы тебе не прочитать какую-нибудь книжку по C#?
Классы и обьекты — это самые основы, сразу после переменных и циклов)

Но вообще лучше всего хранить состояние игры в одном месте, доступном отовсюду, и при его изменении триггерить события, на которые будут подписаны компоненты, которые это состояние как-то отображают
Менять что-то в интерфейсе из рядового скрипта игровой логики — это плохая архитектура


Сообщение отредактировал drcrack - Воскресенье, 28 Января 2018, 18:24
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Error CS0120
Страница 1 из 11
Поиск:

Все права сохранены. GcUp.ru © 2008-2018 Рейтинг