1

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

单人游戏代码参考:

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);
}
4

2 回答 2

2

因此,经过大量搜索,我发现您无法在 Unet 中同步 localScale,这是一个突出的错误。我已将代码更改为使用位置而不是本地比例。感谢所有的帮助。

于 2016-08-08T04:14:04.120 回答
1

万一您还没有通读它,我强烈建议您阅读Unity Networking Manual

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

虽然,您可能不需要它们,因为您有网络转换。确保您已在网络上正确生成/实例化多维数据集。

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

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

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

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

于 2016-08-07T20:15:39.717 回答