Вращение GameObject не происходит на стороне клиента

Переверните двухмерный игровой объект и поместите его в точно такое же положение, что хорошо работает с обеих сторон. Вращение 2d GameObject хорошо работает с обеих сторон

Однако, если я переверну GameObject, выполнив Cmd_DoTheSpawn, вращение не отразится на «другом» клиенте.

Мне нужна помощь, чтобы получить эту работу.

Вот код, который я использую:

[Command]
void Cmd_DoTheSpawn(GameObject myGameObject) {

    // Check if front or back?
    char lastChar = myGameObject.tag[myGameObject.tag.Length - 1];

    if (lastChar == 'B') {
        convertedObjectTag = unet_Back2Front [myGameObject.tag];
    } else {
        convertedObjectTag = unet_Front2Back [myGameObject.tag];
    }

    GameObject my1 = Resources.Load (convertedObjectTag) as GameObject;

    float z = myGameObject.transform.localEulerAngles.z;

    //var go = (GameObject)Instantiate (my1, myGameObject.transform.position, myGameObject.transform.localRotation);
    var go = (GameObject)Instantiate(my1, myGameObject.transform.position, Quaternion.Euler(0f, 0f, z));
    go.name = go.name.Remove(go.name.Length - 7); // Remove the '(Clone)' in name

    NetworkServer.SpawnWithClientAuthority(go, base.connectionToClient);

    print ("myGameObject: " + myGameObject.transform.position);

    if (myGameObject == null)
        print ("myGameObject NULL" + myGameObject.transform.position);

    Rpc_DoTheRot (go, myGameObject);

    myNetID = myGameObject.GetComponent<NetworkIdentity> ();
    Cmd_DestroyGameObject (myNetID.netId);
}

Благодаря @LumbusterTick я заставил его работать, что означает, что вращение в порядке. Однако у меня возникла другая проблема, которую я не совсем понимаю.

Я добавил следующий код:

[ClientRpc]
public void Rpc_DoTheRot(GameObject newGO, GameObject oldGO) {
    print ("Rpc_DoTheRot");

    if (newGO == null)
        print ("newGO NULL");
    if (oldGO == null)
        print ("oldGO NULL");

    newGO.transform.rotation = oldGO.transform.rotation;
}

... который я вызываю после появления, но до уничтожения, см. обновленный код выше.

Он помещает перевернутый префаб в правильное вращение, но я получаю следующие сообщения:

старыйGO NULL

так же как:

NullReferenceException: ссылка на объект не указывает на экземпляр объекта

Я прекрасно знаю, что это значит, но не знаю, почему это происходит, поскольку все значения myGameObject обнуляются, когда я их отправляю. ... и я делаю это до уничтожения.

Я не понимаю, почему он равен нулю, но все же влияет на вращение нового объекта.


person PeterK    schedule 09.04.2016    source источник
comment
Используете ли вы сетевое преобразование?   -  person LumbusterTick    schedule 09.04.2016
comment
Я также использую unet, и может быть много причин, почему он не работает, если объект создается на стороне клиента, а не переворачивается (вращается), тогда значения не синхронизируются.   -  person LumbusterTick    schedule 09.04.2016
comment
@LumbusterTick Я использую сценарии для преобразования сети. Это не проблема, поскольку это работает, когда я вращаюсь в игре, но когда я заменяю префаб в той же позиции с помощью спауна, префаб всегда заканчивается с нулевым вращением. Я понимаю, что значения не синхронизируются, но не понимаю, поскольку я указываю текущее вращение из фактического префаба, из которого я также беру позицию.   -  person PeterK    schedule 09.04.2016
comment
хорошо, давайте попробуем разные вещи, и это действительно помогло мне однажды, из вашей командной функции после запуска сети вызовите функцию clientrpc и передайте ей экземпляр игрового объекта, измените его вращение там и скажите мне, сработало ли это, если это не так, это означает, что что-то неправильно здесь и попробуйте загрузить ресурсы внутри функции создания экземпляра, посмотрите, поможет ли это   -  person LumbusterTick    schedule 10.04.2016
comment
@LumbusterTick Это работает :-) Однако я получаю ошибки. См. обновление в исходном сообщении. Я справился с ошибкой с помощью try & catch, но не понимаю, почему я получаю ошибку, но она работает. Кроме того, пожалуйста, напишите официальный ответ, чтобы я мог отметить его как завершенный.   -  person PeterK    schedule 10.04.2016


Ответы (1)


Из вашей командной функции после запуска сети вызовите функцию clientrpc и передайте ей экземпляр игрового объекта и измените его вращение там.

person LumbusterTick    schedule 11.04.2016