Страница 1 из 1

Остановка игры если ты умер.

СообщениеДобавлено: 28 авг 2018, 10:04
DimaJoke
Всем привет.

"Делаю смерть" в моей игре. решил, что все операции, связанные с остановкой игры надо вывести в отдельный скрипт "Stop".

Сделал GameObjectы Died и Stoper
На Died повесил скрипт "died"
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class died : MonoBehaviour {
public bool death;
public GameObject Stoper;

void Update()
{
        if(death == true)
        {
                Stoper.GetComponent<Stop>().Stopped = true;
        }
        if(death == false)
        {
                Stoper.GetComponent<Stop>().Stopped = false;;
        }
}

}

 


а на Stoper "Stop"
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Stop : MonoBehaviour {
public float timing;
public bool Stopped;

void Update()
{
        Time.timeScale = timing;
        if(Stopped == true)
        {
        timing = 0;
        }
        else if(Stopped == false)
        {
        timing = 1;
        }

}

}

 


в died указал Stoper и запустил.

Unity вывел такой лог ошибки:
UnassignedReferenceException: The variable Stoper of died has not been assigned.
You probably need to assign the Stoper variable of the died script in the inspector.
UnityEngine.GameObject.GetComponent[Stop] () (at C:/buildslave/unity/build/Runtime/Export/GameObject.bindings.cs:28)
died.Update () (at Assets/Scripts/died.cs:17)

Впрочем это всё.
Как исправить эту ошибку?

Re: Остановка игры если ты умер.

СообщениеДобавлено: 28 авг 2018, 10:42
IDoNotExist
GetComponent возвращает компонент с того гейм объекта к которому прикреплён скрипт, у тебя скрипты на разных объектах, поэтому GetComponent вернёт null.

Re: Остановка игры если ты умер.

СообщениеДобавлено: 28 авг 2018, 10:58
DimaJoke
IDoNotExist писал(а):GetComponent возвращает компонент с того гейм объекта к которому прикреплён скрипт, у тебя скрипты на разных объектах, поэтому GetComponent вернёт null.

что тогда делать? :-?

Re: Остановка игры если ты умер.

СообщениеДобавлено: 28 авг 2018, 13:08
Xtir
Зачем вообще в Stop нужен апдейт? :((

Re: Остановка игры если ты умер.

СообщениеДобавлено: 28 авг 2018, 13:16
Xtir
Синтаксис:
Используется csharp
void Update()
{
        Stop.StopTime(death);
}
 


Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class Stop
{
        public static bool Stopped { get; private set; }

        public static void StopTime(bool value)
        {
                Stopped = value;
                if (Stopped) Time.timeScale = 0; else Time.timeScale = 1;
        }
}
 

Re: Остановка игры если ты умер.

СообщениеДобавлено: 28 авг 2018, 15:08
DimaJoke
Xtir писал(а):
Синтаксис:
Используется csharp
void Update()
{
        Stop.StopTime(death);
}
 


Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class Stop
{
        public static bool Stopped { get; private set; }

        public static void StopTime(bool value)
        {
                Stopped = value;
                if (Stopped) Time.timeScale = 0; else Time.timeScale = 1;
        }
}
 


Не останавливается :-s

Re: Остановка игры если ты умер.

СообщениеДобавлено: 28 авг 2018, 15:26
Xtir
Потмоу что у Вас переменная death = false, а надо что бы блыа true, тогда остановится

Re: Остановка игры если ты умер.

СообщениеДобавлено: 28 авг 2018, 16:50
DimaJoke
Xtir писал(а):Потмоу что у Вас переменная death = false, а надо что бы блыа true, тогда остановится

я через редактор во время игры делаю true

Re: Остановка игры если ты умер.

СообщениеДобавлено: 28 авг 2018, 17:08
DimaJoke
насколько я понял (с помощью некоторых махинаций) дело в том, что Stopped не переходит в true

Re: Остановка игры если ты умер.

СообщениеДобавлено: 01 сен 2018, 20:26
getAlex
DimaJoke писал(а):
Синтаксис:
Используется csharp
        if(death == true)
        {
                Stoper.GetComponent<Stop>().Stopped = true;
        }
        if(death == false)
        {
                Stoper.GetComponent<Stop>().Stopped = false;;
        }




Найди правильный вариант:

Синтаксис:
Используется csharp
1)
        if(death == true)
        {
                Stoper.GetComponent<Stop>().Stopped = true;
        }
        if(death == false)
        {
                Stoper.GetComponent<Stop>().Stopped = false;;
        }
2)
        if(death == true)
        {
                Stoper.GetComponent<Stop>().Stopped = true;
        }
        else
        {
                Stoper.GetComponent<Stop>().Stopped = false;;
        }
3)
        if(death)
        {
                Stoper.GetComponent<Stop>().Stopped = true;
        }
        else
        {
                Stoper.GetComponent<Stop>().Stopped = false;;
        }
4)
        if(death)
        {
                Stoper.GetComponent<Stop>().Stopped = death;
        }
        else
        {
                Stoper.GetComponent<Stop>().Stopped = death;;
        }
5)
        Stoper.GetComponent<Stop>().Stopped = death;
6)
        Stop stop;
        ...
       stop.stopped = death;
7)
      Stop.stopp();

 


Когда найдёшь, дальше удаляешь из классов "died" и "Stop" Update(), потому что он там не нужен. Вызывай метод в том месте, где ты получаешь событие ,которое меняет состояние переменной death. Без всяких апдейтов: изменилось death - вызываешь свой метод и всё.

А потом подумай - нужны ли классы died & Stop: какую игровую сущность они представляют и должны ли они быть отдельными классами?