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

Программирование на Юнити.

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

Сообщение DimaJoke 28 авг 2018, 10:04

Всем привет.

"Делаю смерть" в моей игре. решил, что все операции, связанные с остановкой игры надо вывести в отдельный скрипт "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)

Впрочем это всё.
Как исправить эту ошибку?
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

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

Сообщение IDoNotExist 28 авг 2018, 10:42

GetComponent возвращает компонент с того гейм объекта к которому прикреплён скрипт, у тебя скрипты на разных объектах, поэтому GetComponent вернёт null.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

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

Сообщение DimaJoke 28 авг 2018, 10:58

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

что тогда делать? :-?
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

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

Сообщение Xtir 28 авг 2018, 13:08

Зачем вообще в Stop нужен апдейт? :((
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

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

Сообщение Xtir 28 авг 2018, 13:16

Синтаксис:
Используется 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;
        }
}
 
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

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

Сообщение DimaJoke 28 авг 2018, 15:08

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
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

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

Сообщение Xtir 28 авг 2018, 15:26

Потмоу что у Вас переменная death = false, а надо что бы блыа true, тогда остановится
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

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

Сообщение DimaJoke 28 авг 2018, 16:50

Xtir писал(а):Потмоу что у Вас переменная death = false, а надо что бы блыа true, тогда остановится

я через редактор во время игры делаю true
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

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

Сообщение DimaJoke 28 авг 2018, 17:08

насколько я понял (с помощью некоторых махинаций) дело в том, что Stopped не переходит в true
Что бы повзрослеть, человек должен преодолеть ошибки юности.

Поэтому я снова здесь..
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 293
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
  • Сайт

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

Сообщение getAlex 01 сен 2018, 20:26

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: какую игровую сущность они представляют и должны ли они быть отдельными классами?
getAlex
Адепт
 
Сообщения: 1775
Зарегистрирован: 10 авг 2013, 18:30


Вернуться в Скрипты

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

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