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