[Unity3d] Поиcк деактивированных объектов [Скрипт]
Как известно, в юнити нельзя через GameObject.Find найти уже деактивированный объект, однако иногда возникает ситуация когда это необходимо. Скрипт изложенный в статье помогает решать такую задачу.
Стандартными средствами Unity сделать это не удастся, так что приступим;-) Для решения задачи мы будем использовать словарь (dictionary). Словарь - это тип контейнера, для тех кто совсем в танке приведу несколько некорректное пояснение: разновидность массива. Его(словаря) особенностью является способ обращения к нему. Если в обычном массиве мы используем числовой индекс, то доступ к элементу словаря происходит через ключи. Ключом может выступать любой объект. В нашем случае это будет переменная типа string.
Код ниже представлен для C#.
Создаем новый скрипт .cs . Для примера назовем его objHandler.cs. Удалим его содержимое, автоматически созданное Unity ( оно нам не понадобится ).
Добавим в пространство имен следующие значения :
Code
using UnityEngine; using System.Collections; using System.Collections.Generic;
Дальше пишем собственно класс:
Code
public static class objHandler { public static Dictionary<string,GameObject> objRefs = new Dictionary<string, GameObject> ();
public static void AddReference (string name, GameObject obj) { if (!objRefs.ContainsKey (name)) objRefs.Add (name, obj); }
}
Внутри мы создаем словарь где первое значение это ключ типа string(текстовое значение), второе это элемент типа юнити класса GameObject (Игровой Объект). objRefs это название словаря, дальше его инициализация. Пишем метод. Назовем его AddReference. В него передаем два значения, это текстовое значение ( имя объекта ), и сам игровой объект.
Code
if (!objRefs.ContainsKey (name))
- эта строчка является простой проверкой на наличие ключа. Дело в том, что если по какой-то причине вы попытаетесь дважды добавить объект с одинаковым ключом в словарь, то получите ошибку с содержанием "элемент с таким ключом уже существует и тп. и тд.). Чтобы избежать этого мы и совершаем небольшую проверку: если такого ключа нет, то добавляем объект, если есть, то ничего не делаем . Для того чтобы пользоваться objHandler его не нужно добавлять на сцену или крепить к игровым объектам.
Ну а теперь практика;-)
Перед тем как деактивировать объект, который как вы уверены будет необходимо в будущем найти, добавим его в наш словарь. Пишем такую строчку в скрипте объекта, хотя на самом деле неважно откуда и как вы получили реф на gameObject. Это уже индивидуально по вашему проекту.
Code
objHandler.AddReference ("player",gameObject);
Ну и спокойно деактивируем;-) Когда нам потребуется найти этот объект, то вместо
Code
GameObject.Find("player")
мы используем
Code
GameObject o = objHandler.objRefs["player"];
По сути это простейшая основа и база для пула объектов.
Категория: Создание игр | Добавил: pixeye (27 Июня 2012)
| Автор: Pixeye
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «[Unity3d] Поиcк деактивированных объектов [Скрипт]», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.