Проблема с созданием объекта

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

Проблема с созданием объекта

Сообщение Volandpro 19 окт 2012, 19:56

Собственно скрипт
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class MapIcon : MonoBehaviour {
        Vector3 plPosition;
        bool created;
       
        void Start () {
         Network.InitializeServer(2,25000);
                 created=false;
         }
         
         // Update is called once per frame
         void Update () {
         plPosition=transform.position;
         networkView.RPC("Icon", RPCMode.AllBuffered, plPosition,created);
                 created=true;
         }
         [RPC]
          public void Icon(Vector3 plPosition,bool created)
              {
                                if(!created)
                                {
                             GameObject m=Resources.Load("Iconn")as GameObject;
                             GameObject icon=Network.Instantiate(m,Vector3.zero,new Quaternion(0,0,0,0),0)as GameObject;
                             GUITexture text=icon.GetComponent<GUITexture>();
                                         text.color=Color.red;
                                 text.texture=Resources.Load("Icon",typeof(Texture2D)) as Texture2D;
                                         text.transform.localScale=Vector3.zero;
                     text.transform.position=new Vector3(0,0,0.1f);
                                }
                    text.pixelInset=new Rect(plPosition.x/2000f*150f-3f,(plPosition.z/2000f*150f-Screen.height+3f)*(-1),7f,7f); //ругается
          }
       
}

 

Скрипт привязан к объекту на сцене, он отсылает информацию о своей позиции на сервер, тот создает объект через Network.Instantiate, получается текстурка. Если объект уже создан, то объект и текстурка не создаются заново, текстурка лишь меняет свою позицию. Проблема в том, что компилятор ругается на строку text.pixelInset=new Rect(plPosition.x/2000f*150f-3f,(plPosition.z/2000f*150f-Screen.height+3f)*(-1),7f,7f);
A local variable `text' cannot be used before it is declared. Понятно, что это значит, но как сделать нормально? Мне нужно. чтобы все создавалось только 1 раз, чтобы ресурсов много не жрало)
Аватара пользователя
Volandpro
UNITрон
 
Сообщения: 242
Зарегистрирован: 19 авг 2012, 17:07

Re: Проблема с созданием объекта

Сообщение Kayler 19 окт 2012, 20:05

тоесть по вашему проще для игры создавать одну и ту же переменную почти каждый кадр, нежели объявить ее 1 раз и работать с ней?
Аватара пользователя
Kayler
Адепт
 
Сообщения: 1038
Зарегистрирован: 25 авг 2010, 23:49
Откуда: Чувашия

Re: Проблема с созданием объекта

Сообщение Volandpro 19 окт 2012, 20:09

Нет, у меня создается только 1 раз, дальше не создается, так как условие if(!created) не выполняется
Хм а если я для клиента напишу Network.Instantiate, а не в РПЦ функции, то объект создастся только для клиента или для всех?)
Аватара пользователя
Volandpro
UNITрон
 
Сообщения: 242
Зарегистрирован: 19 авг 2012, 17:07

Re: Проблема с созданием объекта

Сообщение Kayler 19 окт 2012, 20:15

Volandpro писал(а):Нет, у меня создается только 1 раз, дальше не создается, так как условие if(!created) не выполняется
Хм а если я для клиента напишу Network.Instantiate, а не в РПЦ функции, то объект создастся только для клиента или для всех?)

для всех, Network.Instantiate тем и отличается от простого Instantiate что создает для всех, его в принципе и не нужно в РПЦ сувать
Аватара пользователя
Kayler
Адепт
 
Сообщения: 1038
Зарегистрирован: 25 авг 2010, 23:49
Откуда: Чувашия

Re: Проблема с созданием объекта

Сообщение Volandpro 19 окт 2012, 20:21

хмхм тогда я могу запихать в Start
Синтаксис:
Используется csharp
GameObject icon=Network.Instantiate(m,Vector3.zero,new Quaternion(0,0,0,0),0)as GameObject;
                             GUITexture text=icon.GetComponent<GUITexture>();

Если я правильно понял, icon создастся для всех, НО ведь text создастся только для одного клиента? или как?
Аватара пользователя
Volandpro
UNITрон
 
Сообщения: 242
Зарегистрирован: 19 авг 2012, 17:07

Re: Проблема с созданием объекта

Сообщение Kayler 19 окт 2012, 20:27

Volandpro писал(а):хмхм тогда я могу запихать в Start
Синтаксис:
Используется csharp
GameObject icon=Network.Instantiate(m,Vector3.zero,new Quaternion(0,0,0,0),0)as GameObject;
                             GUITexture text=icon.GetComponent<GUITexture>();

Если я правильно понял, icon создастся для всех, НО ведь text создастся только для одного клиента? или как?

да.. поэтому надо передавать по рпц команду GUITexture text=icon.GetComponent<GUITexture>(); дабы она сработала у всех
честно говоря могу ошибаться т.к. работал со стандартной сетью давно, но вроде бы так
Аватара пользователя
Kayler
Адепт
 
Сообщения: 1038
Зарегистрирован: 25 авг 2010, 23:49
Откуда: Чувашия

Re: Проблема с созданием объекта

Сообщение Volandpro 19 окт 2012, 20:29

Но тогда у нас будет создаваться текстура каждый кадр(
Хм, нет, все норм вроде, спасибо)
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class MapIcon : MonoBehaviour {
        Vector3 plPosition;
        GameObject m;
    GameObject icon;
        void Start () {
         Network.InitializeServer(2,25000);
                 m=Resources.Load("Iconn")as GameObject;
                 icon=Network.Instantiate(m,Vector3.zero,new Quaternion(0,0,0,0),0)as GameObject;          
         }
         
         // Update is called once per frame
         void Update () {
         plPosition=transform.position;
         networkView.RPC("Icon", RPCMode.AllBuffered, plPosition);
         }
         [RPC]
          public void Icon(Vector3 plPosition)
              {
                                     GUITexture text=icon.GetComponent<GUITexture>();
                                         text.color=Color.red;
                                 text.texture=Resources.Load("Icon",typeof(Texture2D)) as Texture2D;
                                         text.transform.localScale=Vector3.zero;
                     text.transform.position=new Vector3(0,0,0.1f);
                     text.pixelInset=new Rect(plPosition.x/2000f*150f-3f,(plPosition.z/2000f*150f-Screen.height+3f)*(-1),7f,7f);
          }
       
}
 

Как думаете, будет работать? А то мне кажется как то криво
Аватара пользователя
Volandpro
UNITрон
 
Сообщения: 242
Зарегистрирован: 19 авг 2012, 17:07


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

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

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