两个基本组件
NetworkManager
基本组件,主要功能是实现联网的基本功能 。
基本属性
SpawnInfo属性集
- PlayerPrefab=>客户端加入时自动生成的Prefab
- AutoCreatePlayer=>自动生成Prefab。
- PlayerSpawnMethod=>Prefab的生成方法,两个选项。使用这个方法首先要有指定的位置。(NetworkStartPosition)
- Random=>随机生成
- RoundRobin=>轮询,在指定的地点轮流生成
- RegisteredSpawnablePrefabs=>在这个数组中放置的Prefab是需要在网络中生成的,加入到这个数组中,才可以在网络中同步生成。
NetworkManagerHUD
一个测试用的链接UI界面,可以在测试时使用,但是在真正的游戏中不会保留。
Prefab上的组件
NetworkIdentity
NetworkIdentity组件表明这个预设体是一个网络对象,可以设置这个预设体是在客户端生成还是只在服务器端生成
- ServerOnly=>只在服务器端生成,不会在客户端批量生成
- LocalPlayerAuthority=>如果这个对象是由拥有它的客户端控制的,本地玩家对象在这个客户端拥有它的权限,这个属性常被其他组件使用例如Networktransfrom。
NetworkTransform
同步对象在所有客户端上的Transform属性,可以选择同步Rigidbody属性
- NetworkSendRate(seconds)=>同步的评论,0代表在生成是同步一次
- TransformSyncMode=>同步的组件
- SyncNone=>不同步其他组件
- SyncTransform=>同步Transform组件,就算不选,也会同步
- SyncRigidbody2D=>同步Rigidbody2D组件,
- SyncRigidbody3D=>同步Rigidbody3D组件
NetworkStartPosition
这个组件是将这个对象的位置作为Player生成的位置
方法
引用新的父类
引用UnityEngine.Networking,并使对象继承自NetworkBehaviour
using UnityEngine.Networking;
public class PlayerControler : NetworkBehaviour {
- bool 类型 isLocalPlayer,如果这个对象是标识本地机器上的播放的那个对象,则返回值为真
- bool 类型 isServer,如果这个对象是服务器,则为真
- bool 类型 isClient,如果这个对象运行在客户端的话,则为真
与player有关的都用localPlayer处理,与player无关的,用服务器处理 - 方法OnStartLocalPlayer(){}在服务器联入时并且游戏开始时调用,相当于普通的Start方法。
public override void OnStartLocalPlayer() {} - NetworkServe.Spawn(Prefab);将Prefab同步到所有的客户端上。在所有已准备好的客户端上同步给定的游戏对象的生成,注意,这个方法并不会同步物体的移动。
标志方法
[Command]
[Command]的功能是标志以下的方法只能在服务器端调用,客户端调用该方法时,会自动调用服务器端的方法。
要求,这个方法必须以Cmd开头,且不能是静态方法。
[ClientRpc]
[ClientRpc]的功能是标志的以下方法只能在客户端调用,服务器调用该方法时,也会在客户端调用。
要求,这个方法Rpc开头
[SyncVar(hook=”OnChangeHealth”)]
[SyncVar]标记是作用在属性前的,作用是同步该属性到所有的客户端和服务器端。
这个标记中可以增加方法=>[SyncVar(hook=”FunctionName”)],引号中是方法名。当标记的数据值发生变化时,会自动调用引号中的方法,同时将变化后的属性那个值调用到这个方法中。
[SyncVar(hook="OnChangeHealth")]//同步该数据,并在数据发生变化时,调用该方法,同时,这个数据也会被调用到该方法中。
private int currentHealth = MaxHealth;
void OnChangeHealth(int health) {
healthSlider.value = health / (float)MaxHealth;
}