forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Сеть (http://forum.boolean.name/forumdisplay.php?f=169)
-   -   Проблема с фонарем (http://forum.boolean.name/showthread.php?t=17702)

mepihin 01.01.2013 17:32

Проблема с фонарем
 
Почему, когда я создал сетку и все прекрасно работает, игрок выключает фонарик, его не видит, а я вижу его фонарь?
Вот сам скрипт:
Код:

#pragma strict

var spotlight:Light;
var activelight = true;

function Update()
{
        if(networkView.isMine)
        {
                if(activelight==true)
                spotlight.enabled = true;
                else
                {
                        if(activelight==false)
                                spotlight.enabled = false;
                }
               
                if(Input.GetKeyDown(KeyCode.F) && activelight==true)
                {
                        activelight = false;
                }
                else
                {
                        if(Input.GetKeyDown(KeyCode.F) && activelight==false)
                        {
                                activelight = true;
                        }
                }
        }
}


pax 01.01.2013 17:34

Ответ: Проблема с фонарем
 
Потому что всем игрокам по сети надо отправить сообщение (RPC) о выключении фонаря

mepihin 01.01.2013 18:07

Ответ: Проблема с фонарем
 
Цитата:

Сообщение от pax (Сообщение 248025)
Потому что всем игрокам по сети надо отправить сообщение (RPC) о выключении фонаря

Поскажи как, а то что-то не пойму.

is.SarCasm 01.01.2013 18:18

Ответ: Проблема с фонарем
 
У меня было так. Есть игрок и есть "фэйки", которыми управляют сетевые данные, которой мы получаем. Между таким игроком и фэйком есть общий скрипт. В этом скрипте есть функция включить фонарь, которая при наличии сети запускает RPC функцию. В этом же скрипте есть ответ на эту ф-ю, которая уже и включает фонарь.
Скорее всего ты ничего не понял

pax 01.01.2013 18:38

Ответ: Проблема с фонарем
 
Цитата:

Сообщение от mepihin (Сообщение 248028)
Поскажи как, а то что-то не пойму.

Пример отправки всем сообщения тут: http://docs.unity3d.com/Documentatio...PCDetails.html

mepihin 01.01.2013 18:57

Ответ: Проблема с фонарем
 
чет я ничего не понял.
это получается, что я должен вот так код изменить?
Код:

#pragma strict

var spotlight:Light;
var activelight = true;

function Update()
{
        if(networkView.isMine)
        {
                if(activelight==true)
{
                spotlight.enabled = true;
networkView.RPC("spotlight.enabled",RPCMode.All,spotlight.enabled=true)
}
                else
                {
                        if(activelight==false)
                                spotlight.enabled = false;
                }
               
                if(Input.GetKeyDown(KeyCode.F) && activelight==true)
                {
                        activelight = false;
                }
                else
                {
                        if(Input.GetKeyDown(KeyCode.F) && activelight==false)
                        {
                                activelight = true;
                        }
                }
        }
}

Я вообще справку эту не понял.

pax 01.01.2013 19:06

Ответ: Проблема с фонарем
 
я на js не программирую

mepihin 01.01.2013 19:58

Ответ: Проблема с фонарем
 
ну напиши на C# я перепешу
Я то и то знаю

pax 01.01.2013 23:03

Ответ: Проблема с фонарем
 
PHP код:

[RPC]
void SetSpotlight(int state)
{
     
spotlight.enabled state == 1;


использовать так:
PHP код:

networkView.RPC("SetSpotlight",RPCMode.All,spotlight.enabled?1:0); 


mepihin 01.01.2013 23:17

Ответ: Проблема с фонарем
 
то есть конечный код будет вот такой?
PHP код:

#pragma strict

var spotlight:Light;
var 
activelight:int 1;

function 
Update()
{
    if(
networkView.isMine)
    {
        if(
activelight==true)
        
networkView.RPC("SetSpotlight",RPCMode.All,spotlight.enabled?1:0);
        else
        {
            if(
activelight==false)
                
networkView.RPC("SetSpotlight",RPCMode.All,spotlight.enabled?1:0);
        }
        
        if(
Input.GetKeyDown(KeyCode.F) && activelight==true)
        {
            
GameObject.FindGameObjectWithTag("light").animation.CrossFade("off");
            
activelight 0;
        }
        else
        {
            if(
Input.GetKeyDown(KeyCode.F) && activelight==false)
            {
                
GameObject.FindGameObjectWithTag("light").animation.CrossFade("on");
                
activelight 1;
            }
        }
    }
}
@
RPC
function SetSpotlight(state:int)
{
     
spotlight.enabled state == 1;


но вот что-то фонарик не выключается и не включается. Я что-то не так сделал это точно... Подскажите что.

pax 01.01.2013 23:19

Ответ: Проблема с фонарем
 
Убил сеть посылая каждый кадр RPC) Посылай только когда меняется состояние.

Эх
PHP код:

function Update()
{
    if(
networkView.isMine)
    {
      
        if(
Input.GetKeyDown(KeyCode.F) && activelight==true)
        {
            
GameObject.FindGameObjectWithTag("light").animation.CrossFade("off");
            
networkView.RPC("SetSpotlight",RPCMode.All0);
        }
        else  if(
Input.GetKeyDown(KeyCode.F) && activelight==false)
        {
            
GameObject.FindGameObjectWithTag("light").animation.CrossFade("on");
            
networkView.RPC("SetSpotlight",RPCMode.All1);
        }
    }
}

@
RPC
function SetSpotlight(state:int)
{
     
activelight state;
     
spotlight.enabled state == 1;



mepihin 02.01.2013 00:06

Ответ: Проблема с фонарем
 
спс, вот фулл скрипт:
PHP код:

#pragma strict

var spotlight:Light;
var 
activelight:int 1;

function 
Update()
{
    if(
networkView.isMine)
    {
      
        if(
Input.GetKeyDown(KeyCode.F) && activelight==1)
        {
            
GameObject.FindGameObjectWithTag("light").animation.CrossFade("off");
            
networkView.RPC("SetSpotlight",RPCMode.All0);
        }
        else  if(
Input.GetKeyDown(KeyCode.F) && activelight==0)
        {
            
GameObject.FindGameObjectWithTag("light").animation.CrossFade("on");
            
networkView.RPC("SetSpotlight",RPCMode.All1);
        }
    }
}
@
RPC
function SetSpotlight(state:int)
{
     
activelight state;
     
spotlight.enabled state == 1;




Часовой пояс GMT +4, время: 12:05.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot