实现UNet游戏服务器实例化物体,让游戏更加多样化 (unet 服务器实例化物体)

在游戏开发中,如何让游戏更加多样化是一项关键性的工作。实例化物体是一种比较常见的方法,可以给游戏增加更多的元素,让游戏更加有趣、丰富,同时也能够提高游戏的可玩性。本文主要介绍如何在UNet游戏服务器中实现物体实例化,以达到让游戏更加多样化的目的。

一、UNet游戏服务器简介

UNet,全称Unity Networking,是Unity3D游戏引擎自带的一套联网框架,用于实现游戏网络交互功能。它可以帮助开发者快速实现游戏联网功能,并提供了各种联网模式,支持多种平台,包括PC、移动端、VR等。UNet游戏服务器架构主要包括客户端、服务器、网络消息等组成部分,其中服务器起着控制游戏逻辑和数据交互的重要作用。

二、实例化物体的作用

在游戏中,实例化物体是指在运行时动态生成一些游戏物体,这些物体可以是道具、场景中的物品、玩家的角色等等。使用实例化物体可以为游戏带来更多的元素和趣味性,让玩家体验更加丰富。例如,在一款RPG游戏中,玩家可以通过拾取实例化的道具增强自己的能力,这会让游戏更加有成就感和乐趣。

三、实现UNet游戏服务器实例化物体的方法

在UNet游戏服务器中实现实例化物体,需要使用UNet的同步机制,通过同步生成物体的位置、初始属性等信息,让不同玩家在各自的客户端上看到同样的游戏元素。实现的具体方法如下:

1. 创建物体:在服务器中创建物体并赋予其一个网络标识(NetworkIdentity)。这样客户端才能够在自己的客户端上看到这个物体;

2. 设置物置:在服务器中设置物体初始位置,因为客户端需要在自己的视角下看到这个物体。设置方法为调用以下的RPC函数:

‘[ClientRpc]’

void RpcSetPos(Vector3 pos)

{

transform.position = pos;

}

3. 根据需求设置物体属性:通过设置物体的属性,可以实现更丰富、更具有挑战性的游戏玩法。比如,在射击游戏中可以设置不同子弹类型的伤害值,让玩家需要根据情况选择不同类型的子弹;

4. 发送同步消息:完成物体设置后,需要向客户端发送同步消息,让客户端在自己的本地视图中看到这个物体。具体方式是在服务器上调用以下函数:

‘[Command]’

void CmdSpawnObject()

{

GameObject obj = Instantiate(prefab, spawnPosition, Quaternion.identity);

NetworkServer.Spawn(obj);

}

以上步骤中,CmdSpawnObject()函数通过Instantiate()方法实例化一个物体,然后使用NetworkServer.Spawn()方法来向所有客户端发送已实例化物体的同步消息,从而实现在所有客户端上同时显示该物体的效果。

四、实现效果展示

通过以上步骤,在UNet游戏服务器中实现了实例化物体功能。下面是一些实现效果的展示:

1. 通过实例化物体创建出一个发射子弹的枪支,让玩家可以体验射击战斗的乐趣;

2. 实例化不同种类的怪物,让玩家在游戏中面临不同挑战,提高游戏的趣味性和可玩性;

3. 实例化建筑物、装饰物等,在游戏场景中增加更多的元素,提升游戏的真实感和丰富度。

以上仅是一些简单的例子,实例化物体的使用场景和方式有很多,可以根据需要和创意进一步尝试。

五、

实现UNet游戏服务器实例化物体,可以为游戏增加更多的元素、趣味性和可玩性。具体实现方法是在服务器中创建物体并设置其属性,然后向客户端发送同步消息,让所有客户端上同时显示该物体。实例化物体的使用场景很广,可以进一步拓展和创新,为游戏带来更丰富、更有吸引力的体验。

相关问题拓展阅读:

如何同步在UNET / Unity5非玩家游戏物体属性

UNet 网络模块,在Unity里可以服务器逻辑和客户端逻辑在一个类里面编写。

服务器和客户端要做数据同步时,不用发包,在属性前面加上标签就自动同步了,并调用函数即可。

如何使用network manager组件

直接继承自 MonoBehaviour, 还有就是被设计成了单例 singleton

NetworkManager 网络管理器是一个方便的HLAPI 类,用于管理网络系统 。清源

对于简单的网络应用NetworkManager 网络管理器可以使用HLAPI控制 。它提供了简单的方法来 启动和停止 客户端和服务器,以及 管理场景,而且具有虚拟函数,用户代码可以使用 实现 网络事件的处理程序。NetworkManager 网络管理器一次处理一个客户端。下面的示例演示一个最小的网络设置。

using UnityEngine.Networking;

public class Manager : NetworkManager {

public override void OnServerConnect(NetworkConnection conn)

{

Debug.Log (“OnPlayerConnected”);

}

}

NetworkManager 网络管理器是 管理网络状态的多人游戏的一个组成部分。它实际上被实现完全使用 HLAPI,所以它做的一切都是可被其他forms的开发人员使用的。然而网络管理器包装了很多有用的功能,使得创建、 运行和调试尽可能简单的多人游戏。

网络管理器可以使用完全不答蔽态用脚本。它有在编辑器中有 inspector 控件,允许配置其所有功能,和 NetworkManagerHUD 提供简单、默认的用户界面,可以在运行时允许被用户控制的网络游戏。为高级的使用,开发人员可以从网络管理器派生出类 并通过重写虚函数,为它提供的任何自定义其行为。

网络管理器的功能包括:

• Game State Management

• Spawning Management

• Scene Management

• Debugging Information

• Matchmaking 匹配系统

• Customization 可定制

入门 NetworkManager

网络管理器可以作为控制组件的多人游戏的核心。若要开始,在你开始的场景,创建一个空的游戏对象或挑选一个方便管理器对象。从Network/NetworkManager菜单项,然后添加NetworkManager组件。新添加的NetworkManager应如所示:

在编辑器中的NetworkManager的的inspector 面板上 允许您配置和控制与网络相关的很多东西。

NetworkManagerHUD 是与NetworkManager相关的的另一个组件。游戏运行控制网络状态时,它给你一个简单的用户界面。这是很好的入门知识网络项目,但不能用作游戏最终的 ui 设计。NetworkManagerHUD 看起来像:

真正的游戏并哗会有正确的UI ,用于控制游戏状态 和 允许玩家选择什么样的游戏 。但是,若要开始,我们可以暂时以此来控制游戏。

Game State Management

作为客户端,作为一个专用的服务器,或作为 “Host” 是客户端和服务器在同一时间具备 ,UNet 多人游戏可以在三种模式下-运行。UNet 旨在使相同的游戏 代码和资产 在所有这些情况下工作。发展为 单人游戏版本游戏和 多人游戏版本游戏 应该是同一件事。

网络管理器 具有用于输入每一种模式的方法。NetworkManager.StartClient()、 NetworkManager.StartServer() 和 NetworkManager.StartHost() 是所有可用的脚本代码,所以它们可以被调用,从键盘输入的处理程序或自定义UI 事件 。可以选择要显示的默认运行时控件也调用这些相同的功能。也有按钮在 NetworkManagerHUD 的 inspector上,在Play 模式时调用同一函数:

无论哪种方法用来 改变游戏状态、 networkAddress网络地址和 networkPort网络端口 属性被 使用。当启动时后的服务器 或主机 时,networkPort 成为 侦听端口。当客户端启动时,networkAddress是要连接到的地址、networkPort 是要连接到的端口。

Spawning Management

网络管理器可以用于管理网络对象从预置的实例化 。大多数游戏都有 prefab 用作player 的对象,因此网络管理器有一个 槽(字段),拖动player prefab进行赋值。当一个player prefab 设置时,player 对象会自动产生从该prefab, 为每个用户在游戏中创建。这适用于在本地player托管hosted服务器上,和远程客户端上的远程players 参与者。请注意player prefab 必须有 NetworkIdentity 组件。

除了player prefab,其他对象的预置将动态地被生成了但是必须是ClientScene登 记的。这可以通过使用 ClientScene.RegisterPrefab() 函数,或者它可以由网络管理器自动完成。添加 预置生成列表 会使他们自动注册。NetworkManager的 inspector 的字段 配置看起来像:

一旦设置了一个player prefab ,你应该能够作为主机开始游戏,看到 player 对象产生。停止这场比赛应该使player 对象被销毁。当要运行另一个副本的游戏和 连接到本地主机的客户端应使另一个player 对象出现,并停止该客户端应该使该客户端player 对象被销毁。

player object 被被生成是由 NetworkManager.OnServerAddPlayer 默认实现。 如果你想自定义 player object 的创建的方式,你可以重写的虚函数。默认实现是类似:

public virtual void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)

{

var player = (GameObject)GameObject.Instantiate(playerPrefab, playerSpawnPos, Quaternion.identity);

NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);

}

请注意,新创建player object.时NetworkServer.AddPlayerForConnection() 必须被调用函数,所以它是被生成和与客户端的连接相关联。这将产生的对象,所以 NetworkServer.Spawn 不需要为 player object.

Start Positions

若要控制players 被创建,在这里,你可以使用 NetworkStartPosition 组件。网络管理器查找场景中的 NetworkStartPosition 对象,如果它找到了,然后它将产生Player的位置和方向 。自定义代码可以通过NetworkManager.startPositions列表 ,访问可用的 NetworkStartPositions,也是一个 helper 函数 GetStartPosition() 对网络管理器,可以在执行 OnServerAddPlayer 用于查找起始位置。

Scene Management

大多数游戏都有多个场景。在至少有通常是标题屏幕 或 开始菜单场景 还有玩这个游戏的场景。网络管理器是设置来自动管理场景状态 和 场景切换 适合多人游戏的方式。网络管理器的属性面板 有两个插槽: offlineScene 和 onlineScene。将 场景对象拖放到这些插槽 激活网络场景管理。

服务器或主机启动时,将加载online在线的场景。这将会成为当前的网络场景。连接到该服务器的任何客户端将奉命加载这个场景。这个场景的名称存储在 networkSceneName 属性中。

当网络停止时,通过停止的服务器或主机,或断开连接,客户端将加载offline脱机的场景。断开多人游戏时游戏允许自动返回到菜单场景 。

通过调用 NetworkManager.ServerChangeScene(),游戏处于活动状态时,还可以更改场景。这将使所有当前连接的客户端更改场景,并将更新 networkSceneName,新客户还将加载新的场景。

虽然网络的场景管理处于活动状态,调用任何游戏状态管理功能 NetworkManager.StartHost() 或 NetworkManager.StopClient() 可导致场景变化。这适用于运行时控制 UI。所以通过设置场景 并调用这些函数很容易控制流的多人游戏。

注意,场景变化导致的所有对象在场景将被销毁。这可能包括网络管理器! 如果你想要网络管理器在转换是不被销毁,那就确保 “Dont Destroy On Load” 属性被设置为 true。在简单的情况下,这是更佳配置。但是,它是可能有网络管理器在每个使用不同的设置,以控制增量的预制加载或不同的场景切换的场景。

Debugging Information

NetworkManagerHUD 属性面板在运行时显示有关网络状态的其他信息。这包括:

• 网络连接

• 激活 NetworkIdentity 服务器对象

• 激活 NetworkIdentity 客户端对象

• client peers

另外,预览 窗口中显示所注册的客户端消息处理程序。

Matchmaking匹配系统

网络管理器在运行时 用户界面和网络管理 inspector UI 允许与匹配服务的交互。NetworkManager.StartMatchmaker() 函数作为匹配接口,并填充具有一个 NetworkMatch 对象的 NetworkManager.matchmaker 属性。一旦这是激活的默认 Ui 使用它和 回调函数对网络管理器让您执行简单配对。

有虚拟派生类的网络管理器的函数 可以使用自定义的 respoding 给matchmaker回调的行为。

unet 服务器实例化物体的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于unet 服务器实例化物体,实现UNet游戏服务器实例化物体,让游戏更加多样化,如何同步在UNET / Unity5非玩家游戏物体属性,如何使用network manager组件的信息别忘了在本站进行查找喔。


数据运维技术 » 实现UNet游戏服务器实例化物体,让游戏更加多样化 (unet 服务器实例化物体)