# 🔖快速食用

在场景中创建一个空物体,并挂载如下几个脚本。

# 网络管理器

其中,需要指定 Player Prefab, 勾选自动生成玩家可以在连接到服务器时,自动生成玩家对象。

image-20221010100103105

# 玩家

为玩家添加如下组件:

  • Network Identity 表示这是一个需要进行网络同步的物体。
  • NetWork Transform 表示可同步 Transfrom

image-20221010100400624

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

image-20221010100615058

玩家控制脚本
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);
         });
 
         //move
         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}");
     }
 }

# 参考

  • UnityMirror 学习笔记 (2):使用 SyncVar 进行数据同步_Cake_C 的博客 - CSDN 博客
  • UnityMirror 学习笔记 (3):服务器与客户端间的函数调用,互发控制指令:Command,ClientRpc,TargetRpc_Cake_C 的博客 - CSDN 博客
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Fasty 微信支付

微信支付

Fasty 支付宝

支付宝

Fasty 贝宝

贝宝