Вторник, 16 Апреля 2024, 11:48

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [355]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [145]
Статьи о программах для создания игр, уроки и описания.
Софт [43]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [161]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [129]
Статьи, которые не вошли в определённые разделы.
Наш опрос
В игры каких из этих ретро-платформ вы играли?
Всего ответов: 2600
Главная » Статьи » Создание игр

[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
Просмотров: 20272 | Комментарии: 5 | Рейтинг: 4.2/8 |
Теги: Урок, скрипт, Уроки unity3d, прием, Unity3D, программирование, С#
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «[Unity3d] Поиcк деактивированных объектов [Скрипт]», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 5
+0-
3 Fr0sT   (02 Июля 2012 23:24) [Материал]
Fr0sTНадеюсь продолжения будут?Только полезные!

+-2-
4 pixeye   (04 Июля 2012 00:11) [Материал]
pixeyeБудут, у меня есть планы статьи по юнити и геймдизайну писать, просто щас загружен под завязку.

+0-
5 Fr0sT   (04 Июля 2012 14:11) [Материал]
Fr0sTОтлично,буду ждать новых!Желательно чтобы были уроки с которыми можно научиться геймплей создавать.Например создание атаки ну и чтото типо того.

+0-
2 Spihex   (01 Июля 2012 18:16) [Материал]
SpihexНаконец-то толковые записи пошли.

+2-
1 Racot   (28 Июня 2012 01:00) [Материал]
RacotИнтересная тема. Многим пригодится, а от себя Спасибо thumb

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • HeroEngine
  • Tuesday JS
  • RPG Architect
  • O.H.R.RPG.C.E
  • Crey
  • Moddio
  • PICO-8
  • Realm Crafter
  • OpenBOR
  • Axiom Engine
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг