同步Unet / Unity 5中另一个可交互对象更改的非玩家对象转换?

时间:2016-08-07 09:24:09

标签: c# unity3d unity5 unity-networking unity3d-unet

我的游戏中有一个立方体,它在查看另一个对象时会在其初始状态和较大状态之间进行翻转。这在单人游戏中运行良好,但是当我把它带到多人游戏时,我无法找到正确的选项组合,以便在两个客户端(一个是主机)上进行更新。每个玩家仍然可以激活自己的立方体,但不会在另一台机器上显示。该脚本位于具有网络标识的按钮上,它访问具有网络标识和网络转换的多维数据集。

单人游戏代码参考:

void Update () {

    if (Camera.main != null) {
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit)) {
            if (hit.collider.gameObject == gameObject && hit.distance < 5) {
                PlatformScale();
            } else {
                PlatformReset();
            }
        }
    }
}

void PlatformScale () {
    platform.transform.localScale = Vector3.Lerp (platform.transform.localScale, platformScale, 3f * Time.deltaTime);
}
void PlatformReset () {
    platform.transform.localScale = Vector3.Lerp (platform.transform.localScale, platformStartingScale, 3f * Time.deltaTime);
}

2 个答案:

答案 0 :(得分:2)

因此经过多次搜索后我发现你无法在Unet中同步localScale,这是一个很好的bug。我已将代码更改为使用position而不是local scale。感谢您的帮助。

答案 1 :(得分:0)

如果你还没有读过它,我强烈建议你浏览Unity Networking Manual

我建议使用[Command]或[ClientRpc](取决于服务器上的哪些对象以及哪些是本地对象)来缩放比例。

虽然您可能不需要它们,因为您有网络转换。确保您在网络上正确spawned / instantiated多维数据集。

编辑:在网络上生成多维数据集......

using UnityEngine;
using UnityEngine.Networking;

public class CubeStuff : NetworkBehaviour {

    public GameObject cubePrefab;
    public GameObject cube;
    public override void OnStartServer() {
        GameObject cubeSpawn = (GameObject)Instantiate(cubePrefab, transform.position, transform.rotation);
        NetworkServer.Spawn(cubePrefab);
    }
}

但是:根据文档,您不需要网络生成对象,只要它是in the scene,因为这是为您处理的 - 所以您的问题就在其他地方。

我没有足够的信息来真正了解您的设置。您的按钮和UI可以是场景中的对象,只需确保它们已选中本地播放器权限,并且其OnClick()引用正在调用[Command]个函数。