客户端不会发生GameObject旋转

时间:2016-04-09 15:03:05

标签: unity3d unity3d-unet

翻转2d GameObject并将其放在完全相同的位置,两侧都能正常工作。 旋转2d GameObject在两侧都运行良好

但是,如果我通过执行Cmd_DoTheSpawn来翻转GameObject,则旋转不会反映在"其他"客户端。

我需要帮助才能完成这项工作。

以下是我使用的代码:

[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;
}

...我在生成之后但在销毁之前调用,请参阅上面的更新代码。

它确实将翻转的预制件放置在正确的旋转位置,但我确实收到以下消息:

  

oldGO NULL

以及:

  

NullReferenceException:未将对象引用设置为对象的实例

我完全清楚这意味着什么,但不是为什么它会发生,因为我发送它时myGameObject的所有值都是无效的。 ......我在毁灭之前就这样做了。

我不明白为什么它为null但仍然影响新对象的旋转。

0 个答案:

没有答案