Tag: unity networking

Unity Networking-UNet中的加法场景加载

简短说明:我正在我的主场景中加载一个添加场景 ,它的加载很好但是添加场景的GameObject(包含网络标识组件)正在变得禁用 。 详细信息:我正在通过此代码加载一个附加场景,以便添加一个场景加载到我的服务器和所有工作正常的客户端: [ClientRpc] public void RpcLoadLevelAcrossNetwork() { SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); } 虽然它已将我的场景加载到客户端/服务器但是具有网络标识的对象被禁用(这是默认行为,因为我检查了Unity UNetSceneObjects ,其中声明: 加载场景时,将禁用场景中具有NetworkIdentity组件的所有对象; 在客户端和服务器上。 然后, 当场景完全加载时,将调用NetworkServer.SpawnObjects()来激活这些联网的场景对象。 这将在服务器场景完成加载时由NetworkManager自动完成 – 或者可以由用户代码直接调用。 作为文档声明它将自动激活网络标识对象,但它不会在我的上下文中发生。 我的场景加载很好,但其网络标识对象不活动。 我做错了什么? 我还试图通过在我新加载的场景中调用NetworkServer.SpawnObjects()来激活我自己的对象,但它只在服务器端生成对象,同时在客户端显示错误 未找到1个Spawn场景对象的Spawn场景对象找不到2个未找到的Spawn场景对象….. ….. 。 。 任何Unet冠军可以帮助我吗? 编辑/更新方法: 我已经根据添加场景加载的统一论坛讨论更改了我的代码,它在服务器上加载我的附加场景有错误(如下所示),仍然我的客户端的场景网络标识对象被禁用: 错误: 使用无效连接对象调用Ready():conn = null 另一个代码尝试: #region AdditiveSceneLoadingSetup [Command]//calling this for additive scene load- its start public void CmdLoadAdditiveSceneMainCall() { RpcLoadAdditiveScene(); StartCoroutine(LoadAdditiveSceneAtServer()); } […]

UNET多人游戏,让两个玩家与gameObject交互,在主机和客户端上进行同步更改

我想创建一个简单的演示。 我希望在平面中间有一个立方体,当你点击它时会改变颜色。 (这很容易实现)我希望有两个玩家,轮流点击立方体。 如果轮到您,立方体只会改变颜色。 如果立方体改变颜色,则更改将反映在玩家的屏幕上。 我一直在看UNET的例子, http://forum.unity3d.com/threads/unet-sample-projects.331978/ ,他们中的大多数人都有一个用键盘控制的网络角色,这个方面把我扔了 我是否还需要创建2个播放器,但只是让它们不可见并且没有控制脚本? 我的街区应该是预制件吗? 这是我的块的脚本: void Update() { if (Input.GetKeyDown(KeyCode.Space)) { // Command function is called from the client, but invoked on the server CmdChangeColor(); } } [Command] void CmdChangeColor() { if (cubeColor == Color.green) cubeColor = Color.magenta; else if (cubeColor == Color.magenta) cubeColor = Color.blue; else if (cubeColor […]

如何在UNet / Unity5中同步非玩家GameObject属性?

我正在研究和学习Unity 5,UNET和网络的一些基础知识。 我制作了一个简单的3D游戏,你可以四处走动并改变物体的颜色。 但是我现在想让它成为多人游戏,并且我在如何通过网络发送更改方面遇到了很多麻烦,因此所有玩家都可以看到单个玩家的颜色变化。 部分问题是使用较新的UNET网络引擎很难找到答案。 有时我会遇到旧方式的答案。 所以主要的问题是,我如何联网非玩家GameObject属性的变化? 颜色,形状,大小等。 这是我现在的一些代码 – 我有很多不同的版本,所以我只发布当前版本: using UnityEngine; using System.Collections; using UnityEngine.Networking; public class Player_Paint : NetworkBehaviour { private int range = 200; [SerializeField] private Transform camTransform; private RaycastHit hit; [SyncVar] private Color objectColor; [SyncVar] private GameObject objIdentity; void Update () { CheckIfPainting(); } void CheckIfPainting(){ if(Input.GetMouseButtonDown(0)) { if (Physics.Raycast […]