Найти дите черз одного

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Найти дите черз одного

Сообщение LONEBONE 07 ноя 2013, 03:07

Итак есть строка PS/PSR/PS/PS/PS/PSR/PS... аля стринг
это точки точки соединений левая(PS) и правая. к которым крепиться некий объект.
LoUP наш объект крепления.
например PS/PSR грубо говоря между ними находиться не обозначенный объект который надо пропустить и присвоить следующего элемента как родителя.
Синтаксис:
Используется csharp
string[] Eval = TREMOR.Split('/');//это разделяет и заносит в массив
for(int i=0;i<Eval.Length;i++){
                Debug.Log("BEFORE"+LoUP.parent.name);//это выводиться             
                LoUP.parent = LoUP.GetChild(0).FindChild(Eval[i]).FindChild(Eval[i+1]);
                               
                Debug.Log("AFTER"+LoUP.parent.name);//  а это нет                               
                                        }
Аватара пользователя
LONEBONE
UNец
 
Сообщения: 29
Зарегистрирован: 30 окт 2013, 23:05

Re: Найти дите черз одного

Сообщение DbIMok 07 ноя 2013, 03:34

LONEBONE писал(а):LoUP.parent = LoUP.GetChild(0).FindChild(Eval[i]).FindChild(Eval[i+1]);

поясните, что делает эта строчка. делает объект ребенком своего же ребенка какого-то уровня в иерархии и при этом пытается выйти за пределы массива?
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Найти дите черз одного

Сообщение LONEBONE 07 ноя 2013, 22:25

не работает 3 ступень иерархи не знаю что делать помогите не знаю даже реализовать.(
Синтаксис:
Используется csharp
POINTS = GlobalTransfer.GetAllChildren(GameObject.FindGameObjectWithTag("Player"));

Transform LoUP = (Transform)Instantiate(GETGO(TITS).transform,Vector3.zero,Quaternion.identity);       
       foreach(GameObject PP in POINTS){
                if(TREMOR == "/"+CP){
                TREMOR ="";                            
                }
                Debug.Log(TREMOR);             
                if(PP.GetComponent<UNICID>().UID == CP && TREMOR==""){
                                       
                LoUP.parent = PP.transform;//привзяка к базовой точке.(работает) 1 ступень иерархии
                LoUP.parent.GetComponent<MeshRenderer>().enabled = false;                      
                LoUP.localPosition = new Vector3(0,0,0);                       
                                }
                if(PP.GetComponent<UNICID>().UID == CP && TREMOR.Length>1){
                Debug.Log(TREMOR.Substring(1));
                string[] Eval = TREMOR.Split('/');     

                LoUP.parent = PP.transform.GetChild(0).FindChild(TREMOR.Substring(1)); // тоже работает 2 ступень иерархии
                if(TREMOR.Length>7){// не работает привязка к иерархии больше 2
                                       
                for(int i=0;i<Eval.Length;i++){
                Debug.Log("BEFORE"+LoUP.parent.name);                                  
                LoUP.parent = LoUP.parent.GetChild(0).FindChild(Eval[i]).FindChild(Eval[i+1]);
                               
                Debug.Log("AFTER"+LoUP.parent.name);                                   
                                        }
                                        }
                LoUP.parent.GetComponent<MeshRenderer>().enabled = false;                      
                LoUP.localPosition = new Vector3(0,0,0);
                                       
                                }
                               
                        }      
Аватара пользователя
LONEBONE
UNец
 
Сообщения: 29
Зарегистрирован: 30 окт 2013, 23:05

Re: Найти дите черз одного

Сообщение LONEBONE 07 ноя 2013, 22:28

Полная версия ф-и
Синтаксис:
Используется csharp
public static void LOAD_SAVED(string STR){
        XmlDocument XXX = new XmlDocument();
        XXX.Load(STR); 
        XmlElement elem = (XmlElement)XXX.DocumentElement.FirstChild;  
        XmlNode node = XXX.DocumentElement;
        IEnumerator ienum = node.GetEnumerator();
        XmlNode PART;
        string TREMOR="";
        string CP="";
        GameObject[] POINTS;
        POINTS = GlobalTransfer.GetAllChildren(GameObject.FindGameObjectWithTag("Player"));
               
               
//      int n =0;      
while((ienum.MoveNext())){
                       
                PART = (XmlNode)ienum.Current;
               
                int TITS=-1;
               
                try{
                TITS = int.Parse(PART.InnerXml);                       
            TREMOR = PART.OuterXml;
                TREMOR = TREMOR.Substring(0,TREMOR.IndexOf(">"));              
                TREMOR = TREMOR.Replace("<","");
                TREMOR = TREMOR.Replace("_","/");
                CP = TREMOR.Split(new char[] {'/','/'})[1];
            TREMOR = TREMOR.Substring(TREMOR.IndexOf('/',1));

                        }catch{}       
                //Debug.Log(CP);               
//              Debug.Log(TREMOR);     
                Transform LoUP = (Transform)Instantiate(GETGO(TITS).transform,Vector3.zero,Quaternion.identity);       
       foreach(GameObject PP in POINTS){
                if(TREMOR == "/"+CP){
                TREMOR ="";                            
                }
                Debug.Log(TREMOR);             
                if(PP.GetComponent<UNICID>().UID == CP && TREMOR==""){
                                       
                LoUP.parent = PP.transform;
                LoUP.parent.GetComponent<MeshRenderer>().enabled = false;                      
                LoUP.localPosition = new Vector3(0,0,0);                       
                                }
                if(PP.GetComponent<UNICID>().UID == CP && TREMOR.Length>1){
                Debug.Log(TREMOR.Substring(1));
                string[] Eval = TREMOR.Split('/');     

                LoUP.parent = PP.transform.GetChild(0).FindChild(TREMOR.Substring(1));
                if(TREMOR.Length>7){
                                       
                for(int i=0;i<Eval.Length;i++){
                Debug.Log("BEFORE"+LoUP.parent.name);                                  
                LoUP.parent = LoUP.parent.GetChild(0).FindChild(Eval[i]).FindChild(Eval[i+1]);
                               
                Debug.Log("AFTER"+LoUP.parent.name);                                   
                                        }
                                        }
                LoUP.parent.GetComponent<MeshRenderer>().enabled = false;                      
                LoUP.localPosition = new Vector3(0,0,0);
                                       
                                }
                               
                        }              
                       
                }
        }
}
Аватара пользователя
LONEBONE
UNец
 
Сообщения: 29
Зарегистрирован: 30 окт 2013, 23:05

Re: Найти дите черз одного

Сообщение extravert 08 ноя 2013, 00:36

Очень неясно сформулирована задача. Приведите более ясные примеры. Вам нужно иерархично зайти в объект по указанной вами строке с каким-то правилом? Тогда давайте правило.
Лично я вообще не понял - что, куда, зачем, откуда, по какому принципу выбирается

по вашему выражению:
LoUP.GetChild(0).FindChild(Eval[i])..FindChild(Eval[i+1]);
обозначает что родителем LoUp становится Loup->какой то чилд->снова какой то чилд->и снова какой то чилд
Аватара пользователя
extravert
UNIверсал
 
Сообщения: 465
Зарегистрирован: 24 дек 2012, 11:54

Re: Найти дите черз одного

Сообщение LONEBONE 08 ноя 2013, 00:45

ну стмотрите
Изображение
нужно задать родителя для конпоинта пропустив DefaultTurret (на ее месте может быть любой объект) те прикрепить ребенку(ConPoint или ConPointR) этой турели
(вот хмлка)
Синтаксис:
Используется csharp
<Default2>
  <_CP4>3</_CP4>
  <_CP4_ConPoint>4</_CP4_ConPoint>
  <_CP4_ConPoint_ConPointR>1</_CP4_ConPoint_ConPointR>
  <_CP5>4</_CP5>
  <_CP5_ConPointR>4</_CP5_ConPointR>
  <_CP5_ConPointR_ConPoint>4</_CP5_ConPointR_ConPoint>
  <_CP5_ConPointR_ConPoint_ConPointR>4</_CP5_ConPointR_ConPoint_ConPointR>
  <_CP5_ConPointR_ConPoint_ConPointR_ConPoint>4</_CP5_ConPointR_ConPoint_ConPointR_ConPoint>
  <_CP6>4</_CP6>
  <_CP6_ConPoint>4</_CP6_ConPoint>
  <_CP6_ConPoint_ConPoint>1</_CP6_ConPoint_ConPoint>
  <_CP6_ConPoint_ConPointR>1</_CP6_ConPoint_ConPointR>
  <_CP8>3</_CP8>
  <_CP8_ConPoint>4</_CP8_ConPoint>
  <_CP8_ConPoint_ConPoint>1</_CP8_ConPoint_ConPoint>
  <_CP8_ConPoint_ConPointR>1</_CP8_ConPoint_ConPointR>
</Default2>
Аватара пользователя
LONEBONE
UNец
 
Сообщения: 29
Зарегистрирован: 30 окт 2013, 23:05

Re: Найти дите черз одного

Сообщение LONEBONE 08 ноя 2013, 02:01

решил проблему изменив сохрание
Аватара пользователя
LONEBONE
UNец
 
Сообщения: 29
Зарегистрирован: 30 окт 2013, 23:05


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Google [Bot] и гости: 24