Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2017, 18:53   #1
Carter1987
Новичок
Джуниор
 
Регистрация: 17.02.2017
Сообщений: 4
По умолчанию Unity Взаимодействия между скриптами

Здравствуйте, Подскажите пожалуйста, как правильно написать скрипт.
У меня есть 2 скрипта. Один называется Trap второй GameManager. В скрипте Треп, у меня код. Игрок, соприкоснувшись с обьектом, на котором висит скрипт Трап, уничтожается, игра останавливается, и активируется меню с рестартом уровня и выходом из игры. Я хочу создать переменную в скрипте ГеймМенеджер, с этими функциями, а со скрипта Трап, обращаться к этим функциям.
Вот коды скриптов...

Код:
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour {


	public GameObject EndMenu;

	public void Restart () 
	{
		SceneManager.LoadScene (1);
	}

	public void QuitGame ()
	{
		Application.Quit();

	}

	public void EM ()
	{
		
		EndMenu.SetActive (true);
		Time.timeScale = 0;

	}

}


и скрипт Трап

Код:
using UnityEngine;
using System.Collections;

public class Trap : MonoBehaviour {
	

	//public GameObject MenuGameOver;

	void OnTriggerEnter2D(Collider2D coll)
	{
		switch (coll.gameObject.tag) 
		{
		case "Player":
			Destroy (coll.gameObject);

			---public void EM ()---  Вот тут метод ЕМ, с скрипта Гейм Менеджер

			//Time.timeScale = 0;
			//MenuGameOver.SetActive (true);
			break;

		}
	}

У меня Ловушек много в игре, и в каждую перетаскивать ГеймОбджект я думаю не правельно, проще в скрипте ГемМенеджер вставить UI EndMenu, и с скрипта Трап обращаться... Как это правельно сделать не могу понять ((

Последний раз редактировалось Carter1987; 17.02.2017 в 19:37.
Carter1987 вне форума Ответить с цитированием
Старый 17.02.2017, 19:40   #2
Carter1987
Новичок
Джуниор
 
Регистрация: 17.02.2017
Сообщений: 4
По умолчанию

Код:
using UnityEngine;
using System.Collections;

public class Trap : MonoBehaviour {
	
	public GameManager GM;

	void OnTriggerEnter2D(Collider2D coll)
	{
		switch (coll.gameObject.tag) 
		{
		case "Player":
			Destroy (coll.gameObject);
			GM.EM ();


			break;

		}
	}
}

Вот. Разобрался немного, но тут мне нужно перетаскивать код ГеймМенеджер. А как написать код, что бы он атвоматически находил метод ЕМ ??

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 17.02.2017 в 19:44.
Carter1987 вне форума Ответить с цитированием
Старый 17.02.2017, 19:44   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что значит "перетаскивать код"?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.02.2017, 19:47   #4
Carter1987
Новичок
Джуниор
 
Регистрация: 17.02.2017
Сообщений: 4
По умолчанию

public GameManager GM;

Я перетаскиваю (прикручиваю) в Юнити код вручную. В ечейку GM... И тогда все работает! Но мне надо дать ссылку на метод ЕМ!!!
Carter1987 вне форума Ответить с цитированием
Старый 17.02.2017, 20:10   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А как экземпляры Trap создаются? И GameManager.

Я не знаю как всё устроено в Юнити, но для обращения к методу экземпляра класса надо каким-нибудь образом передать ссылку на этот экземпляр. Через конструктор или свойство/поле. Или если в программе может существовать только один экземпляр класса, то можно сделать класс static или реализовать синглтон.

И скорее всего вам надо изучать основы C#, ибо думая только про перетаскивания и прикручивания вряд ли можно далеко уехать.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 17.02.2017 в 22:29.
Alex11223 вне форума Ответить с цитированием
Старый 18.02.2017, 15:09   #6
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

По идее, Game Manager должен быть синглтоном. Это делается так:

Код:
public class GameManager{
   private GameManager(){}
   private static GameManager instance = new GameManager();
   public static GameManager Instance {get {return instance;}}

   /// Тут остальной код.
   /// Методы отсюда уже вызываешь из других скриптов.
}
Ну, и да, учи C#.
a.k.a. Angelicos Phosphoros
Мой сайт

Последний раз редактировалось New man; 18.02.2017 в 15:12.
New man вне форума Ответить с цитированием
Старый 19.02.2017, 17:35   #7
Carter1987
Новичок
Джуниор
 
Регистрация: 17.02.2017
Сообщений: 4
По умолчанию

Всем спасибо ребята! Но я решил эту проблему другим путем....

Я создал пустой обьект на сцене, и к нему прикрепил код ГеймМенеджер. В коде трап прописал
GameObject.getcomponent<GameManager >().GM();
но тут у меня игра зависать начала при старте...

тогда я прикрепил скрипт GameManager на камеру...

в коде Трап прописал Camera.main.getComponent<GameManage r>().GM();
и все работает ))
Carter1987 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Периодическая передача данных между скриптами triest JavaScript, Ajax 0 29.12.2016 01:11
Организация взаимодействия между пользовательскими элементами Geradot ASP.NET 1 14.06.2012 14:06
организация взаимодействия между процесами посредствомпочтовых ящиков И конвееров Microsoft Visual C++ Юлия_24 Помощь студентам 0 23.11.2010 17:06
Обмен скриптами tanos JavaScript, Ajax 1 28.01.2008 22:18