Как использовать переменную с одного скрипта в другом?

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

Как использовать переменную с одного скрипта в другом?

Сообщение termin 18 окт 2012, 14:02

Есть у кого какие нибудь версии то как наследовать переменную(ые) с одного С шарп скрипта в другом скрипте? Если есть примеры будет кстати.
Аватара пользователя
termin
UNец
 
Сообщения: 14
Зарегистрирован: 11 окт 2012, 12:02
Откуда: Душанбе

Re: Как использовать переменную с одного скрипта в другом?

Сообщение seaman 18 окт 2012, 14:08

На форуме несколько десятков таких тем.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как использовать переменную с одного скрипта в другом?

Сообщение KorsaiR 18 окт 2012, 14:12

допустим у тебя 2 скрипта: n1, и n2. в скрипте n2 у тебя есть bool переменная YaCrut. n1 у тебя на обьеките O1, n2 на обьекте O2:

скрипт n1 делает bool переменной из n2 значение false :

Синтаксис:
Используется csharp
public Transform o1;//перемещаем сюда наш O2

void gc(){//сама функция

n2 s = (n2)o1.GetComponent<n2>();//n2 - название скрипта, s - временное название для n2, чтобы обращаться к нему.
s.YaCrut = false;//изменяем саму переменную.

}
Мои игры: Sunrise, Fireground, Spacerift
Sunrise: _www.sunsurv.ru , _https://store.steampowered.com/app/6631 ... _survival/
Fireground: _https://store.steampowered.com/app/1026 ... ND/?beta=0
Spacerift: _https://vk.com/spacerift
Аватара пользователя
KorsaiR
Старожил
 
Сообщения: 797
Зарегистрирован: 09 июл 2012, 12:20
Откуда: Новосибирск
Skype: pwiliya

Re: Как использовать переменную с одного скрипта в другом?

Сообщение termin 18 окт 2012, 14:58

seaman писал(а):На форуме несколько десятков таких тем.

давай ссылки раз такой умный
Аватара пользователя
termin
UNец
 
Сообщения: 14
Зарегистрирован: 11 окт 2012, 12:02
Откуда: Душанбе

Re: Как использовать переменную с одного скрипта в другом?

Сообщение AMD 18 окт 2012, 15:43

Еще один способ, более глобальный
Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему.
AMD
UNITрон
 
Сообщения: 349
Зарегистрирован: 16 июн 2012, 14:33
Откуда: Москва

Как использовать переменную с одного скрипта в другом?

Сообщение termin 18 окт 2012, 16:15

У меня 2 скрипта:

1й скрипт принимает udp пакеты и отображает их:

Синтаксис:
Используется csharp
 
/*
    -----------------------

    UDP-Receive (send to)

    -----------------------
    // <a href="http://msdn.microsoft.com/de-de/library/bb979228.aspx#ID0E3BAC" onclick="window.open(this.href);return false;" class="postlink">http://msdn.microsoft.com/de-de/library/bb979228.aspx#ID0E3BAC</a>
    // > receive
    // 127.0.0.1 : 8051
        // send
    // nc -u 127.0.0.1 8051

*/


using UnityEngine;
using System.Collections;
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

public class UDPReceive : MonoBehaviour {

        // receiving Thread
    Thread receiveThread;
    // udpclient object
    UdpClient client;

     // public
    // public string IP = "127.0.0.1"; default local
    public int port; // define > init

    // infos
    public string lastReceivedUDPPacket="";
    public string allReceivedUDPPackets=""; // clean up this from time to time!

     // start from shell
    private static void Main()
    {
       UDPReceive receiveObj=new UDPReceive();
       receiveObj.init();
       string text="";
       do
        {
             text = Console.ReadLine();
        }
        while(!text.Equals("exit"));
    }
    // start from unity3d
   
   public void Start()
    {         init();
    }

       // OnGUI
    void OnGUI()
    {
     Rect rectObj=new Rect(40,10,200,400);
     GUIStyle style = new GUIStyle();
     style.alignment = TextAnchor.UpperLeft;
     GUI.Box(rectObj,"# UDPReceive\n127.0.0.1 "+port+" #\n"
                 + "shell> nc -u 127.0.0.1 : "+port+" \n"
                 + "\nLast Packet: \n"+ lastReceivedUDPPacket
                 + "\n\nAll Messages: \n"+allReceivedUDPPackets
                ,style);
    }
 
    // init
    private void init()
    {
        // Endpunkt definieren, von dem die Nachrichten gesendet werden.
        print("UDPSend.init()");
   
        // define port
        port = 2020;
        // status
        print("Receiving from 127.0.0.1 : "+port);
        print("Test-Receiving from this Port: nc -u 127.0.0.1  "+port+"");
   

        // ----------------------------

        // Abhören

        // ----------------------------

        // Lokalen Endpunkt definieren (wo Nachrichten empfangen werden).

        // Einen neuen Thread für den Empfang eingehender Nachrichten erstellen.

        receiveThread = new Thread(
            new ThreadStart(ReceiveData));
        receiveThread.IsBackground = true;
        receiveThread.Start();
    }

     // receive thread
  private  void ReceiveData()
    {
                int count=0;
           IPEndPoint remoteIP = new IPEndPoint(IPAddress.Parse("10.0.2.213"), port);
       client = new UdpClient(remoteIP);
       while (true)
        {
           try
            {
                // Bytes empfangen.
                IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
                byte[] data = client.Receive(ref anyIP);
               
                               
                                float x= data[0]|data[1]<<8|data[2]<<16|data[3]<<24;
                                // Bytes mit der UTF8-Kodierung in das Textformat kodieren.
//                string text = Encoding.UTF8.GetString(data);
                // Den abgerufenen Text anzeigen.
                print(">> " + x.ToString());
               
                // latest UDPpacket
                lastReceivedUDPPacket=x.ToString()+" Packet#: "+count.ToString();
                        count = count+1;

                // ....
                allReceivedUDPPackets=allReceivedUDPPackets+x.ToString();
                               
            }
            catch (Exception err)
            {
               print(err.ToString());
            }
                        // must have some sort of wait here, or we use all available CPU.
                        Thread.Sleep(10); // wait 10 ms
        }
                client.Close();
    }
 

    // getLatestUDPPacket
    // cleans up the rest

    public string getLatestUDPPacket()
    {
        allReceivedUDPPackets="";
        return lastReceivedUDPPacket;
    }
}
 


2й скрипт находится там же где и 1й скрипт и должен пересылать сообщения который получил 1 скрипт на указанный порт:
Синтаксис:
Используется csharp
/*
    -----------------------
    UDP-Send
    -----------------------

    // <a href="http://msdn.microsoft.com/de-de/library/bb979228.aspx#ID0E3BAC" onclick="window.open(this.href);return false;" class="postlink">http://msdn.microsoft.com/de-de/library/bb979228.aspx#ID0E3BAC</a>
    // > gesendetes unter
    // 127.0.0.1 : 8050 empfangen
    // nc -lu 127.0.0.1 8050
        // todo: shutdown thread at the end
*/


using UnityEngine;
using System.Collections;
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

public class UDPSend : MonoBehaviour
{
    private static int localPort;
    // prefs
    private string IP;  // define in init
    public int port;  // define in init


    // "connection" things
    IPEndPoint remoteEndPoint;
    UdpClient client;

    // gui
    string strMessage="";
    // call it from shell (as program)

    private static void Main()
    {
        UDPSend sendObj=new UDPSend();
        sendObj.init();
   
        // testing via console
        // sendObj.inputFromConsole();
        // as server sending endless

       sendObj.sendEndless(" endless infos \n");
    }

    // start from unity3d
    public void Start()
    {
        init();
    }
 
    // OnGUI
    void OnGUI()
    {
        Rect rectObj=new Rect(40,380,200,400);
            GUIStyle style = new GUIStyle();
                style.alignment = TextAnchor.UpperLeft;
        GUI.Box(rectObj,"# UDPSend-Data\n127.0.0.1 "+port+" #\n"
                    + "shell> nc -lu 127.0.0.1  "+port+" \n"
                ,style);

                // ------------------------
        // send it
        // ------------------------
        strMessage=GUI.TextField(new Rect(40,420,140,20),strMessage);
        if (GUI.Button(new Rect(190,420,40,20),"send"))
        {
           sendString(strMessage+"\n");
        }      
    }

    // init
    public void init()
    {
        // Endpunkt definieren, von dem die Nachrichten gesendet werden.
        print("UDPSend.init()");
        // define
        IP="10.0.2.213";
        port=2021;
       

        // ----------------------------

        // Senden

        // ----------------------------
        remoteEndPoint = new IPEndPoint(IPAddress.Parse(IP), port);
        client = new UdpClient();
     

        // status
        print("Sending to "+IP+" : "+port);
        print("Testing: nc -lu "+IP+" : "+port);
 
    }

    // inputFromConsole
    private void inputFromConsole()
    {
        try
        {
           string text;
            do
            {
                text = Console.ReadLine();
                // Den Text zum Remote-Client senden.
                if (text != "")
                {
                    // Daten mit der UTF8-Kodierung in das Binärformat kodieren.
                    byte[] data = Encoding.UTF8.GetBytes(text);
                    // Den Text zum Remote-Client senden.
                    client.Send(data, data.Length, remoteEndPoint);
                }
            } while (text != "");
        }
        catch (Exception err)
        {
            print(err.ToString());
        }
    }

    // sendData
    private void sendString(string message)
    {
        try
        {
                //if (message != "")
                //{
                    // Daten mit der UTF8-Kodierung in das Binärformat kodieren.
                    byte[] data = Encoding.UTF8.GetBytes(message);
                    // Den message zum Remote-Client senden.
                    client.Send(data, data.Length, remoteEndPoint);
                //}
       }
        catch (Exception err)
        {
            print(err.ToString());
       }
    }

    // endless test
    private void sendEndless(string testStr)
    {
        do
        {
            sendString(testStr);
        }
        while(true);
    }

}
 



Вопрос: Как реализовать общения между этими скриптами?
Подсказки: Нужно добавить переменну с принимающего скрипта в остылающий скрипт, они находятся в одном месте и возможно нужно использовать GetComponent, но я в этом начинающий поэтому незнаю куда это все закрутить, но знаю что).
Ребят, помогите кто чем может)
Аватара пользователя
termin
UNец
 
Сообщения: 14
Зарегистрирован: 11 окт 2012, 12:02
Откуда: Душанбе

Re: Как использовать переменную с одного скрипта в другом?

Сообщение termin 18 окт 2012, 16:20

продолжение темы и кларификация вопроса http://unity3d.ru/distribution/viewtopic.php?f=18&t=11724
Аватара пользователя
termin
UNец
 
Сообщения: 14
Зарегистрирован: 11 окт 2012, 12:02
Откуда: Душанбе

Re: Как использовать переменную с одного скрипта в другом?

Сообщение termin 18 окт 2012, 16:26

KorsaiR писал(а):допустим у тебя 2 скрипта: n1, и n2. в скрипте n2 у тебя есть bool переменная YaCrut. n1 у тебя на обьеките O1, n2 на обьекте O2:

скрипт n1 делает bool переменной из n2 значение false :

Синтаксис:
Используется csharp
public Transform o1;//перемещаем сюда наш O2

void gc(){//сама функция

n2 s = (n2)o1.GetComponent<n2>();//n2 - название скрипта, s - временное название для n2, чтобы обращаться к нему.
s.YaCrut = false;//изменяем саму переменную.

}


интересный ответ)) глянька http://unity3d.ru/distribution/viewtopic.php?f=18&t=11724 может что подскажешь))
Аватара пользователя
termin
UNец
 
Сообщения: 14
Зарегистрирован: 11 окт 2012, 12:02
Откуда: Душанбе

Re: Как использовать переменную с одного скрипта в другом?

Сообщение seaman 18 окт 2012, 16:39

давай ссылки раз такой умный

С чего вдруг я за Вас буду искать. Вам предупреждение за дублирование темы.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как использовать переменную с одного скрипта в другом?

Сообщение termin 18 окт 2012, 16:43

seaman писал(а):
давай ссылки раз такой умный

С чего вдруг я за Вас буду искать. Вам предупреждение за дублирование темы.


Уточнение темы это есть дублирование/?? :-q
Аватара пользователя
termin
UNец
 
Сообщения: 14
Зарегистрирован: 11 окт 2012, 12:02
Откуда: Душанбе

Re: Как использовать переменную с одного скрипта в другом?

Сообщение seaman 18 окт 2012, 16:45

Вы понимаете слово "дублирование"?- Повторное создание темы по тому же вопросу.
ЗЫ: темы объединены.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как использовать переменную с одного скрипта в другом?

Сообщение Kayler 18 окт 2012, 16:49

seaman писал(а):
давай ссылки раз такой умный

С чего вдруг я за Вас буду искать. Вам предупреждение за дублирование темы.

а вот я дам ссылку
viewtopic.php?f=105&t=2051&st=0&sk=t&sd=a&hilit=faq
это подтверждает то что автор не пользуется поиском, тем более даже не заглянул в фак
Аватара пользователя
Kayler
Адепт
 
Сообщения: 1038
Зарегистрирован: 25 авг 2010, 23:49
Откуда: Чувашия

Re: Как использовать переменную с одного скрипта в другом?

Сообщение termin 18 окт 2012, 17:02

Kayler писал(а):
seaman писал(а):
давай ссылки раз такой умный

С чего вдруг я за Вас буду искать. Вам предупреждение за дублирование темы.

а вот я дам ссылку
viewtopic.php?f=105&t=2051&st=0&sk=t&sd=a&hilit=faq
это подтверждает то что автор не пользуется поиском, тем более даже не заглянул в фак


за ссылку спасибо, а вот вы по моему непоняли суть вопроса, потому что уточненный вопрос якобы был дублирован, а затем был объединен с этим вопросом, идите выше, ибо истинный вопрос находится там :)
Аватара пользователя
termin
UNец
 
Сообщения: 14
Зарегистрирован: 11 окт 2012, 12:02
Откуда: Душанбе

Re: Как использовать переменную с одного скрипта в другом?

Сообщение Левш@ 18 окт 2012, 17:30

Есть у кого какие нибудь версии то как наследовать переменную(ые) с одного С шарп скрипта в другом скрипте?

Получите в старте ссылку на сам скрипт и делайте со всеми его public переменными и функциями все что вам нужно.
Есть также ветка static переменных.
Все это подробно описано с примерами применения в мануалах, не ленитесь и пользуйте ScriptReferense.
Последний раз редактировалось Левш@ 18 окт 2012, 18:12, всего редактировалось 1 раз.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Как использовать переменную с одного скрипта в другом?

Сообщение seaman 18 окт 2012, 17:31

Вам уже несколько раз дали ответ. Читайте выше (как Вы сами только что написали).
Какая разница - что делают Ваши скрипты. Доступ к переменным не зависит от этого.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

След.

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

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

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