2016-12-05 9 views
0

В настоящее время я изучаю, как все это работает в единстве. В моем коде я создаю космический корабль из нескольких сборных блоков.Unity Нерест ребенка с полномочиями клиента

Все начинается с одного Hardpoint. A Hardpoint может содержать один объект, который будет создан позже в цикле.

В PlayerController (начальная точка) У меня этот код, чтобы породить первый объект, кабину:

[Command] 
void CmdOnConnect() { 
    string json = GameObject.Find("TestPlayer").GetComponent<ComponentObject>().ToJSON(); 
    CompressedComponent compressedComponent = JsonUtility.FromJson<CompressedComponent>(json); 
    gameObject.GetComponent<Hardpoint>().Hold(GameObject.Find("Component Repository").GetComponent<ComponentRepository>().cockpit[compressedComponent.componentNumber]); 
    gameObject.GetComponent<Hardpoint>().SpawnComponent(); 
    gameObject.GetComponent<Hardpoint>().RollThroughDecompression(compressedComponent); 
    Camera.main.GetComponent<PlayerCamera>().player = gameObject; 
} 

Далее идет SpawnComponent() код, расположенный в Hardpoint сценария:

public void SpawnComponent() { 
    Clear(); 
    CmdSpawn(); 
} 

CmdSpawn, также находится в Hardpoint:

[Command] 
public void CmdSpawn() 
{ 
    Debug.Log("[COMMAND] Spawning " + holds.name); 
    heldInstance = Instantiate(holds, transform.position, transform.rotation) as GameObject; 
    heldInstance.transform.SetParent(transform); 
    NetworkServer.SpawnWithClientAuthority(heldInstance, transform.root.gameObject); 
} 

И, наконец, RollThroughDecompression, который просто вызывает Decompress() функцию:

public void RollThroughDecompression(CompressedComponent c) { 
    heldInstance.GetComponent<ComponentObject>().Decompress(c); 
} 

И просто не оставить никакой информации из, Decompress():

public void Decompress(CompressedComponent c) { 
    componentType = (Type)Enum.Parse(typeof(Type), c.componentType); 
    componentNumber = c.componentNumber; 
    UpdateHardPoints(); 
    GameObject[] typeRepository = GetRepository(componentType); 

    //update children 
    int point = 0; 
    foreach (Transform child in transform) 
    { 
     Hardpoint hardpoint = child.GetComponent<Hardpoint>(); 
     if (hardpoint != null) { 
      if (c.hardpoints[point] != null) { 
       //get the hardpoint's repository 
       GameObject[] hardpointRepo = GetRepository((Type)Enum.Parse(typeof(Type), c.hardpoints[point].componentType)); 
       //set the hardpoint to hold this object 
       hardpoint.Hold(hardpointRepo[c.hardpoints[point].componentNumber]); 
       hardpoint.SpawnComponent(); 
       hardpoint.RollThroughDecompression(c.hardpoints[point]); 
       point++; 
      } 
     } 
    } 
} 

К сожалению код немного грязный/запутанным, но я был подтолкнули стены, пытаясь понять, почему недавно возникшие объекты не имеют client authority, за исключением первого объекта, порожденного (вероятно, потому, что он вызван из PlayerController). Я уже несколько дней задерживаюсь над этой проблемой. Недавно порождали объекты создаются как дети локального объекта игрока и даже породили с NetworkServer.SpawnWithClientAuthority еще при тестировании:

Trying to send command for object without authority. при вызове CmdSpawn().

NetworkManager: enter image description here

В результате я получаю:

enter image description here

Как вы можете видеть, кабина (очень первая часть) получает породил, как и ожидалось. но части, установленные на тех Hardpoints, нет. Чтобы уточнить, это EmptyHardpoint. Жесткая точка без детей, только пустой игровой объект с сценарием hardpoint и прикрепленным к нему playercontroller. В сборку кабины также входят img и hardpoints

ответ

0

Я думаю, вы забыли добавить своего ребенка Спаун в список Spawn из NetworkManager.

enter image description here

+0

Неверный. Это была моя первая догадка, но первый компонент, который должен быть порожден, действительно порождается, другие - нет. Я выложу скриншот через минуту. –

+0

, если вы нерестились отдельно, поэтому назначьте отдельно –

+0

Извините, посмотрите на это неправильно. Обновлено, но, к сожалению, проблема сохраняется. –