Не получается сделать вывод очков

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Не получается сделать вывод очков

Сообщение _Jeka_ 18 сен 2019, 20:35

Здравствуйте, входе создания игры появилась глобальная проблема!Мне нужно чтоб на экране выводилось кол-во очков(очки начисляются за каждое сломанное препятсвие, если у препятсвия 5 хп, то начислится 5 очков).Все объекты спавнятся рандомно и для каждого них всех 1 скрипт и все взаимодействия с объектами отслеживаются в скрипте, который висит на них(снятие хп, уничтожение).У меня не получается коректно выводить кол-во очков.На сколько я понимаю после каждого уничтожения объекта счетчик обнуляется(скрипт ниже)пробовал создавать пустой объект и вешать на него этот скрипт-не вышло.Пытался делать переменные хп и очков публичными и передавать их в другой скрипт(методами:Getcomponent<>().score и передавая объект через инспектор)- не вышло.Сейчас думаю, что нужно создать отдельный скрипт, который будет отслеживать нажатия на препятствия и снимать у них хп и остальную логистику. Помогите пожалуйста!Заранее всем спасибо за потраченное время.Сейчас вышел такой скрипт, для самих объектов
Синтаксис:
Используется csharp
public class Управление : MonoBehaviour {
    public int hp;
    public int score;
    public Vector2 direction ;
    public float acceleration;
    public Rigidbody2D rb;
    private Text txt;
   public int score1;
    void Start () {
        //Обрашаюсь к тексту на экране
        txt = GameObject.Find("Score").GetComponent<Text>();
        //задаю хп и очки по названию объекта
        name = gameObject.name;
        switch(name){
            case "5(Clone)":
                hp = 5;
                score1 = 5;
            break;
            case "10(Clone)":
                hp = 10;
                score1 = 10;
                break;
            case "15(Clone)":
                hp = 15;
                score1 = 15;
                break;
            case "25(Clone)":
                hp = 25;
                score1 = 25;
                break;
            case "50(Clone)":
                hp = 50;
                score1 = 50;
                break;
            case "100(Clone)":
                hp = 100;
                score1 = 100;
                break;
        }
    }
    void OnMouseDown()
    {
        hp-=10;
    }
    //падение объекта
    void FixedUpdate() {
        rb.AddForce(direction.normalized* acceleration);
    }
    //вывод на экран кол-во очков, но каждый раз очки обнуляются,(было 10 очков, после того как сломал другой объект стало 15)
     void Update()  {
        if (hp <= 0)
        {
           score =score + score1;
           Destroy(this.gameObject);// Debug.Log(score);
           Debug.Log(score);
           txt.text = "Score:" + score.ToString();
        }

           }
}
_Jeka_
UNец
 
Сообщения: 47
Зарегистрирован: 07 сен 2019, 23:14

Re: Не получается сделать вывод очков

Сообщение Saltant 19 сен 2019, 00:44

Скрипт полное гавно, переделывай.
У юнити есть методы отслеживания соприкосновений типа https://docs.unity3d.com/ru/current/Scr ... ter2D.html такими способами отслеживай с каким объектом соприкасаешься, снимай хп, прибавляй очки. Для счета создай паблик переменную score и просто прибавляй к ней новые циферки счета типа score += addScore, где addScore это циферка которую прибавить хочешь в счет. В апдейте только на экран можешь выводить счет, т.е не подсчет а именно отобразить в UI циферку, остальная логика делается в других методах.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Не получается сделать вывод очков

Сообщение 1max1 19 сен 2019, 11:42

Saltant писал(а):Скрипт полное гавно, переделывай.

=))
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Не получается сделать вывод очков

Сообщение _Jeka_ 19 сен 2019, 18:57

Saltant писал(а):Скрипт полное гавно, переделывай.
У юнити есть методы отслеживания соприкосновений типа https://docs.unity3d.com/ru/current/Scr ... ter2D.html такими способами отслеживай с каким объектом соприкасаешься, снимай хп, прибавляй очки. Для счета создай паблик переменную score и просто прибавляй к ней новые циферки счета типа score += addScore, где addScore это циферка которую прибавить хочешь в счет. В апдейте только на экран можешь выводить счет, т.е не подсчет а именно отобразить в UI циферку, остальная логика делается в других методах.

Т.е. мне нужно создать отдельный скрипт и через него считывать тачи или это скрипт прикрепить к препятствивям?
_Jeka_
UNец
 
Сообщения: 47
Зарегистрирован: 07 сен 2019, 23:14

Re: Не получается сделать вывод очков

Сообщение Saltant 19 сен 2019, 21:25

_Jeka_ писал(а):
Saltant писал(а):Скрипт полное гавно, переделывай.
У юнити есть методы отслеживания соприкосновений типа https://docs.unity3d.com/ru/current/Scr ... ter2D.html такими способами отслеживай с каким объектом соприкасаешься, снимай хп, прибавляй очки. Для счета создай паблик переменную score и просто прибавляй к ней новые циферки счета типа score += addScore, где addScore это циферка которую прибавить хочешь в счет. В апдейте только на экран можешь выводить счет, т.е не подсчет а именно отобразить в UI циферку, остальная логика делается в других методах.

Т.е. мне нужно создать отдельный скрипт и через него считывать тачи или это скрипт прикрепить к препятствивям?

На препятствия крепи коллайдер с галочкой триггер. У этого объекта выстави какой нибудь таг который будет определять этот объект (тип такого объекта), далее на него можешь крепить любые другие скрипты. На скрипт персонажа (или что там у тебя взаимодйствовать будет с объектами) крепи скрипт в котором создай метод OnTriggerEnter2D(Collider col); если у тебя 2д, в методе проверяй с каким объектом по тагу ты столкнулся типа if(col.gameObject.CompareTag(prepatstvie1)) и выполняй нужные действия, снимай хп, добавляй очки и т.д
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Не получается сделать вывод очков

Сообщение _Jeka_ 20 сен 2019, 17:11

Saltant писал(а):
_Jeka_ писал(а):
Saltant писал(а):Скрипт полное гавно, переделывай.
У юнити есть методы отслеживания соприкосновений типа https://docs.unity3d.com/ru/current/Scr ... ter2D.html такими способами отслеживай с каким объектом соприкасаешься, снимай хп, прибавляй очки. Для счета создай паблик переменную score и просто прибавляй к ней новые циферки счета типа score += addScore, где addScore это циферка которую прибавить хочешь в счет. В апдейте только на экран можешь выводить счет, т.е не подсчет а именно отобразить в UI циферку, остальная логика делается в других методах.

Т.е. мне нужно создать отдельный скрипт и через него считывать тачи или это скрипт прикрепить к препятствивям?

На препятствия крепи коллайдер с галочкой триггер. У этого объекта выстави какой нибудь таг который будет определять этот объект (тип такого объекта), далее на него можешь крепить любые другие скрипты. На скрипт персонажа (или что там у тебя взаимодйствовать будет с объектами) крепи скрипт в котором создай метод OnTriggerEnter2D(Collider col); если у тебя 2д, в методе проверяй с каким объектом по тагу ты столкнулся типа if(col.gameObject.CompareTag(prepatstvie1)) и выполняй нужные действия, снимай хп, добавляй очки и т.д

Спасибо большое, понял свою ошибку, сейчас постараюсь исправить!
_Jeka_
UNец
 
Сообщения: 47
Зарегистрирован: 07 сен 2019, 23:14

Re: Не получается сделать вывод очков

Сообщение _Jeka_ 20 сен 2019, 21:30

Saltant писал(а):
_Jeka_ писал(а):
Saltant писал(а):Скрипт полное гавно, переделывай.
У юнити есть методы отслеживания соприкосновений типа https://docs.unity3d.com/ru/current/Scr ... ter2D.html такими способами отслеживай с каким объектом соприкасаешься, снимай хп, прибавляй очки. Для счета создай паблик переменную score и просто прибавляй к ней новые циферки счета типа score += addScore, где addScore это циферка которую прибавить хочешь в счет. В апдейте только на экран можешь выводить счет, т.е не подсчет а именно отобразить в UI циферку, остальная логика делается в других методах.

Т.е. мне нужно создать отдельный скрипт и через него считывать тачи или это скрипт прикрепить к препятствивям?

На препятствия крепи коллайдер с галочкой триггер. У этого объекта выстави какой нибудь таг который будет определять этот объект (тип такого объекта), далее на него можешь крепить любые другие скрипты. На скрипт персонажа (или что там у тебя взаимодйствовать будет с объектами) крепи скрипт в котором создай метод OnTriggerEnter2D(Collider col); если у тебя 2д, в методе проверяй с каким объектом по тагу ты столкнулся типа if(col.gameObject.CompareTag(prepatstvie1)) и выполняй нужные действия, снимай хп, добавляй очки и т.д

Не выходит, сделал как вы сказали, но я вынужден привязать действия снятия хп и всего этого, на препятствия . Суть в чем, с верху в рандомных местах спавнятся префабы, у каждого из них свое кол-во хп, после того как хп становится равным нулю, они уничтожаются. Мне из них нужно просто вытаскивать кол-во очков за то что я их поломал,но как это сделать, я не понимаю.Либо как через глобальный скрипт им передовать урон и хп (препятсивиям).Может как-то можно проверять сломан ли объект или нет.За сегодня уже раза 3 переписывал скрипты
скрипт на препятсвиях
Синтаксис:
Используется csharp
using UnityEngine;
public class Checer : MonoBehaviour
{
    public Rigidbody2D rb;
    public Vector2 direction;
    public float acceleration;
    public int hp;
    public int score = 0;

    void Start()
    {
        if (this.gameObject.CompareTag("5"))
        {
            hp = 5;
            score = 5;
        }
        else if (this.gameObject.CompareTag("10"))
        {
            hp = 10;
            score = 10;
        }
        else if (this.gameObject.CompareTag("15"))
        {
            hp = 15;
            score = 15;
        }
        else if (this.gameObject.CompareTag("25"))
        {
            hp = 25;
            score = 25;
        }
        else if (this.gameObject.CompareTag("50"))
        {
            hp = 50;
            score = 50;
        }
        else if (this.gameObject.CompareTag("100"))
        {
            hp = 100;
            score = 100;
        }
    }
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.CompareTag("Cursor")) { hp--; print(hp); }
    }
    void Update() { if (hp <= 0) Destroy(this.gameObject); }
    void FixedUpdate()
    {
        rb.AddForce(direction.normalized * acceleration);
    }
}

скрип в который я хочу получать переменную score
Синтаксис:
Используется csharp
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
public class Cursor : MonoBehaviour {
    public Checer chec;
    public int Score=0;
    public int ScoreADD;
    private Text txt;
    void Start()
    {
        txt = GameObject.Find("ScoreUI").GetComponent<Text>();
    }
    private IEnumerator Co_WaitForSeconds(float value)
    {
        yield return new WaitForSeconds(value);
    }
    void Update () {
        StartCoroutine(Co_WaitForSeconds(5f));
        { transform.position = new Vector3(-30, 30, 2); }
        if (Input.GetMouseButtonDown(0))
        {
            Vector2 MousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            transform.position = MousePos;
        }
        txt.text = "Score:" + Score.ToString();
        Score += ScoreADD;
        ScoreADD = chec.score;
    }
}
 

UPD Решил добавить клоны этих префабов в инспектор, теперь счетчик очков летит с бешеной скоростью
_Jeka_
UNец
 
Сообщения: 47
Зарегистрирован: 07 сен 2019, 23:14

Re: Не получается сделать вывод очков

Сообщение Saltant 20 сен 2019, 22:59

В методе OnTriggerEnter2D и проверяй сколько осталось хп, и если <=0 то прибавляй очки и уничтожай объект, не нужно это делать в апдейте.
По поводу что очки накручиваются, так у тебя в апдейте Score += ScoreADD, апдейт срабатывает каждый кадр, выше я написал где тебе нужно плюсовать очки.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Не получается сделать вывод очков

Сообщение _Jeka_ 20 сен 2019, 23:34

Saltant писал(а):В методе OnTriggerEnter2D и проверяй сколько осталось хп, и если <=0 то прибавляй очки и уничтожай объект, не нужно это делать в апдейте.
По поводу что очки накручиваются, так у тебя в апдейте Score += ScoreADD, апдейт срабатывает каждый кадр, выше я написал где тебе нужно плюсовать очки.

Наконец-то получилось сделать, очень помог ваш совет! и + наконец-то понял, как нужно было передавать переменную score(объявив ее static) и прописав Cursor.Score += score1;
_Jeka_
UNец
 
Сообщения: 47
Зарегистрирован: 07 сен 2019, 23:14


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30