:bookmark:快速食用
在场景中创建一个空物体,并挂载如下几个脚本。
网络管理器
其中,需要指定Player Prefab,勾选自动生成玩家可以在连接到服务器时,自动生成玩家对象。

玩家
为玩家添加如下组件:
- Network Identity 表示这是一个需要进行网络同步的物体。
- NetWork Transform 表示可同步Transfrom

PS:注意勾选认证,让玩家只能控制自己的物体

玩家控制脚本1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| using System; using System.Collections; using System.Collections.Generic; using Mirror; using UniRx; using UnityEngine;
Qpublic class PlayerCtr : NetworkBehaviour { [SerializeField] private float speed = 10; [SyncVar(hook = nameof(OnColorChanged))] private Color _color; private MeshRenderer _renderer; private void Awake() { _renderer = GetComponent<MeshRenderer>(); } private void Start() { if (isServer) { RpcTest(); } Observable.EveryUpdate().Where(_ => isLocalPlayer && Input.GetKeyDown(KeyCode.Space)).Subscribe(_ => { print("按下空格"); var color = _color == Color.white ? Color.black : Color.white; CmdChangeColor(color); }); Observable.EveryUpdate().Where(_ => isLocalPlayer).Subscribe(_ => { var h = Input.GetAxis("Horizontal"); var v = Input.GetAxis("Vertical"); if (Mathf.Abs(h) > 0.1f || Mathf.Abs(v) > 0.1f) { var dir = new Vector3(h, 0, v).normalized; transform.Translate(dir * speed * Time.deltaTime); } }); } private void OnColorChanged(Color oldColor, Color newColor) { print("颜色变化"); _renderer.material.color = newColor; } [Command] private void CmdChangeColor(Color color) { _color = color; } [ClientRpc] private void RpcTest() { print($"当前客户端为:{this.netId}"); } }
|
参考